1) Mongoose
介紹
Mongoose 是一個對象文檔模型庫,官網(wǎng) http://www.mongoosejs.net/
作用
方便使用代碼操作 mongodb 數(shù)據(jù)庫
使用流程
// 導(dǎo)入mongoose
const mongoose = require("mongoose");
// 連接 mongodb
mongoose.connect('mongodb://127.0.0.1:27017/bilibili');
// 設(shè)置回調(diào)
mongoose.connection.on("open", () => {
// 設(shè)置連接成功的回調(diào)
console.log("連接成功");
});
mongoose.connection.on("error", () => {
// 設(shè)置連接錯誤的回調(diào)
console.log("連接失敗");
});
mongoose.connection.on("close", () => {
// 設(shè)置連接關(guān)閉的回調(diào)
console.log("連接關(guān)閉");
});
// 關(guān)閉連接
setTimeout(() => {
mongoose.disconnect();
}, 2000);
2) 插入文檔
// 導(dǎo)入mongoose
const mongoose = require("mongoose");
mongoose.set('strictQuery', false);
// 連接 mongodb
mongoose.connect('mongodb://127.0.0.1:27017/bilibili');
// 設(shè)置回調(diào)
mongoose.connection.once("open", () => {
// 創(chuàng)建文檔的結(jié)構(gòu)對象
let BookSchema = new mongoose.Schema({
name: String,
author: String,
price: Number
});
// 創(chuàng)建模型對象
let BookModel = mongoose.model('books', BookSchema);
// 新增
BookModel.create({
name: "西游記",
author: "吳承恩",
price: 19.9
}, (err,data)=>{
if (err) {
console.log(err);
return;
}
console.log(data);
mongoose.disconnect();
});
});
mongoose.connection.on("error", () => {
// 設(shè)置連接錯誤的回調(diào)
console.log("連接失敗");
});
mongoose.connection.on("close", () => {
// 設(shè)置連接關(guān)閉的回調(diào)
console.log("連接關(guān)閉");
});
3) 字段類型
文檔結(jié)構(gòu)可選的常用字段類型列表
類型 | 描述 |
---|---|
String | 字符串 |
Number | 數(shù)字 |
Boolean | 布爾值 |
Array | 數(shù)組,也可以使用[] 來標識 |
Date | 日期 |
Buffer | Buffer 對象 |
Mixed | 任意類型,需要使用 mongoose.Schema.Types.Mixed 指定 |
ObjectId | 對象 ID,需要使用 mongoose.Schema.Types.ObjectId 指定 |
Decimal128 | 高精度數(shù)字,需要使用 mongoose.Schema.Types.Decimal128 指定 |
4) 字段值驗證
Mongoose 有一些內(nèi)建驗證器,可以對字段值進行驗證
必填項
title: {
type: String,
required: true // 設(shè)置必填項
},
默認值
author: {
type: String,
default: '匿名' //默認值
},
枚舉值
gender: {
type: String,
enum: ['男','女'] //設(shè)置的值必須是數(shù)組中的
},
唯一值 (主鍵)
username: {
type: String,
unique: true
},
unique 需要
重建集合
才能有效果
5) CRUD
數(shù)據(jù)庫的基本操作包括四個,增加(create),刪除(delete),修改(update),查(read)
1) 增加
插入一條
SongModel.create({
title:'給我一首歌的時間',
author: 'Jay'
}, function(err, data){
//錯誤
console.log(err);
//插入后的數(shù)據(jù)對象
console.log(data);
});
批量插入
PhoneModel.insertMany([
{
brand:'華為',
color:'灰色',
price:2399,
tags:['電量大','屏幕大','信號好']
},
{
brand:'小米',
color:'白色',
price:2099,
tags:['電量大','屏幕大','信號好']
}],(err,data)=>{
if(err) throw err;
console.log('寫入成功');
mongoose.connection.close();
})
2) 刪除
刪除一條數(shù)據(jù)
BookModel.deleteOne({_id: "65c60c85df92ad81ab74d4a8"}, (err, data) => {
// 判斷
if (err) {
console.log("刪除失敗~~");
return;
}
console.log(data);
});
批量刪除
BookModel.deleteMany({is_hot: false}, (err, data) => {
if (err) {
console.log("刪除失敗~~");
return;
}
console.log(data);
});
3) 更新
更新一條
BookModel.updateOne({name: "紅樓夢"}, {price: 9.9}, (err, data) => {
if (err) {
console.log(err);
return;
}
console.log(data);
});
批量更新
BookModel.updateMany({author: "余華"}, {is_hot: false}, (err, data) => {
if (err) {
console.log(err);
return;
}
console.log(data);
});
4) 查詢
查詢單條數(shù)據(jù)
BookModel.findOne({name: "狂飆"}, (err, data) => {
if (err) {
console.log(err);
}
console.log(data);
});
根據(jù)id查詢
BookModel.findById({_id: "65c60c85df92ad81ab74d4b9"}, (err, data) => {
if (err) {
console.log(err);
}
console.log(data);
});
批量查詢 (條件可以不添加則自動獲取所有)
BookModel.find({author: "余華"}, (err, data) => {
if (err) {
console.log(err);
}
console.log(data);
});
6) 條件控制
1) 運算符
在 mongodb 不能 > < >= <= !== 等運算符,需要使用替代符號
-
> 使用 $gt
-
< 使用 $lt
-
>= 使用 $gte
-
<= 使用 $lte
-
!== 使用 $ne
db.students.find({id: {$gt: 3}}); id號比3大的所有的記錄
2) 邏輯運算
$or
邏輯或的情況
db.students.find({$or: [{age:18},{age:24}]});
$and
邏輯與的情況文章來源:http://www.zghlxwxcb.cn/news/detail-830541.html
db.students.find({$and: [{age: {$lt:20}}, {age: {$gt: 15}}]});
3) 正則匹配
條件中可以直接使用 JS 的正則語法,通過正則可以進行模糊查詢文章來源地址http://www.zghlxwxcb.cn/news/detail-830541.html
db.students.find({name:/劉/});
db.students.find({name: new RegExp('劉')});
7) 個性化讀取
1) 字段篩選
//0:不要的字段
//1:要的字段
SongModel.find().select({_id:0,title:1}).exec(function(err,data){
if(err) throw err;
console.log(data);
mongoose.connection.close();
});
2) 數(shù)據(jù)排序
//sort 排序
//1:升序
//-1:倒序
SongModel.find().sort({hot:1}).exec(function(err,data){
if(err) throw err;
console.log(data);
mongoose.connection.close();
});
3) 數(shù)據(jù)截取
//skip 跳過 limit 限定
SongModel.find().skip(10).limit(10).exec(function(err,data){
if(err) throw err;
console.log(data);
mongoose.connection.close();
});
到了這里,關(guān)于Node.js開發(fā)-MongoDB的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!