安装
npm i --save mongoose
npm init -y
touch my.js
查找tests集合所有记录
var mongoose = require('mongoose');
// 连接数据库
mongoose.connect('mongodb://localhost:10086/mydb', { useNewUrlParser: true, useUnifiedTopology: true });
// 绑定连接成功触发的一次性事件
mongoose.connection.once('open', () => {
console.log('connceted to database.')
});
// 设置该数据库field类型
var sc = mongoose.Schema({
name: String, age: Number
})
// 获得tests集合的模型
//两个参数Test为对应集合去掉s后首字母大写
//var test = mongoose.model("Test", sc);
//三个参数指定该模型为test集合
var test = mongoose.model("Test", sc,"test");
// tests集合对象查询
test.find({}, function (err, doc) {
if (err) {
console.log(err + "e");
} else {
console.log(doc + "d");
}
})
node my.js
更新数据
Test.updateOne({ name: "li" }, { name: "li", age: 123456, add: "北京" }, function (err, doc) {
if (err) {
console.log(err);
return;
} else {
console.log(""+doc+"update");
}
删除数据
Test.deleteOne({name:"teee"},(err,res)=>{console.log(res);
});
Test.deleteMany({name:"teee"},(err,res)=>{console.log(res);
});
连接
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
绑定连接事件
var db = mongoose.connection;
//长期事件,错误发生时触发
db.on('error', console.error.bind(console, 'connection error:'));
//一次性事件
db.once('open', function() {
// we're connected!y
});
//绑定断开
db.connection.on('disconnected', function () {
console.log('数据库连接断开');
})
//断开连接
mongoose.disconnect();
设置约束
var mySchema = mongoose.Schema({
name: String,
gender: {
type: String, //类型
default: "female" //默认值
}
});
model绑定约束
var Model = mongoose.model('collectionsname',mySchema);
生成dos对象
var blogEntity = new blogModel({
title: "Mongoose",
author: "L",
body: "Documents are instances of out model. Creating them and saving to the database is easy",
comments: [{ body: "It's very cool! Thanks a lot!", date: "2014.07.28" }],
hidden: false,
meta: {
votes: 100,
favs: 99
}
})
执行添加操作
blogEntity.save(function(err, docs){
if(err) console.log(err);
console.log('保存成功:' + docs);
})
crud
增(C)
var doc = { title: "Mongoose", author: "L", } ;
blogModel.create(doc,
function (err, docs) {
if (err) { console.log(err); }
console.log('保存成功:' + docs);
});
多条数据插入,将多条数据一次性插入,相对于循环使用create
保存会更加快。
Model.insertMany([
{ title: "mongoose1", author: "L" },
{ title: "mongoose2", author: "L" }],
function (err, docs) {
if (err) { console.log(err); }
console.log('保存成功:' + docs);
});
查(R)
conditions
:查询条件;projection
:控制返回的字段;options
:控制选项;callback
:回调函数。
blogModel.find({title: "Mongoose", meta.votes: 100},
{title: 1, author: 1, body: 1}, //显示的字段投影
function(err, docs)
{ if(err) console.log(err);
console.log('查询结果:' + docs);})
查询“title”标题为“Mongoose”,并且“meta”中“votes”字段值为“100”的记录,返回仅返回“title”、“author”、“body”三个字段的数据。
conditions
:查询条件;projection
:控制返回的字段;options
:控制选项;callback
:回调函数。
只返回第一个查询记录。
Model.findById(id, [projection], [options], [callback])
id
:指定_id
的值;projection
:控制返回的字段;options
:控制选项;callback
:回调函数。
改(U)
Model.update(conditions, doc, [options], [callback])
conditions
:查询条件;doc
:需要修改的数据,不能修改主键(_id
);options
:控制选项;callback
:回调函数,返回的是受影响的行数。
options
有以下选项:
safe (boolean): 默认为true。安全模式。
upsert (boolean): 默认为false。如果不存在则创建新记录。
multi (boolean): 默认为false。是否更新多个查询记录。
runValidators: 如果值为true,执行Validation验证。
setDefaultsOnInsert: 如果upsert选项为true,在新建时插入文档定义的默认值。
strict (boolean): 以strict模式进行更新。
overwrite (boolean): 默认为false。禁用update-only模式,允许覆盖记录。
blogModel.update({title: "Mongoose"}, {author: "L"}, {multi: true}, function(err, docs){ if(err) console.log(err); console.log('更改成功:' + docs);})
以上代码先查询“title”为“Mongoose”的数据,然后将它的“author”修改为“L”,“multi”为true允许更新多条查询记录。
Model.updateMany(conditions, doc, [options], [callback])
一次更新多条
Model.updateOne(conditions, doc, [options], [callback])
一次更新一条
Model.findByIdAndUpdate(id, [update], [options], [callback])
id
:指定_id
的值;update
:需要修改的数据;options
控制选项;callback
回调函数。
options
有以下选项:
new: bool - 默认为false。返回修改后的数据。
upsert: bool - 默认为false。如果不存在则创建记录。
runValidators: 如果值为true,执行Validation验证。
setDefaultsOnInsert: 如果upsert选项为true,在新建时插入文档定义的默认值。
sort: 如果有多个查询条件,按顺序进行查询更新。
select: 设置数据的返回。
Model.findOneAndUpdate([conditions], [update], [options], [callback])
conditions
:查询条件;update
:需要修改的数据;options
控制选项;callback
回调函数。
options
有以下选项:
new: bool - 默认为false。返回修改后的数据。
upsert: bool - 默认为false。如果不存在则创建记录。
fields: {Object|String} - 选择字段。类似.select(fields).findOneAndUpdate()。
maxTimeMS: 查询用时上限。
sort: 如果有多个查询条件,按顺序进行查询更新。
runValidators: 如果值为true,执行Validation验证。
setDefaultsOnInsert: 如果upsert选项为true,在新建时插入文档定义的默认值。
passRawResult: 如果为真,将原始结果作为回调函数第三个参数。
删(D)
Model.remove(conditions, [callback])
blogModel.remove({author: "L"}, function(err, docs){ if(err) console.log(err); console.log('删除成功:' + docs);})
删除“author”值为“L”的记录。
Model.findByIdAndRemove(id, [options], [callback])
id
:指定_id
的值;update
:需要修改的数据;options
控制选项;callback
回调函数。
options
有以下选项:
sort: 如果有多个查询条件,按顺序进行查询更新。
select: 设置数据的返回。
Model.findOneAndRemove(conditions, [options], [callback])
conditions
:查询条件;update
:需要修改的数据;options
控制选项;callback
回调函数。
options
有以下选项:
sort: 如果有多个查询条件,按顺序进行查询更新。
maxTimeMS: 查询用时上限。
select: 设置数据的返回。
复杂条件查询
其他操作参考