3.9 Mongoose基于Model的新增和删除操作
文档新增
文档新增有三种方法,一种是使用上面介绍过的文档的save()
方法,另一种是使用模型model的create()
方法,最后一种是模型model的insertMany()
方法
save()
[注意]回调函数可以省略
save([options], [options.safe], [options.validateBeforeSave], [fn])
新建{age:10,name:'save'}文档,并保存
var mongoose = require('mongoose');
mongoose.connect("mongodb://u1:123456@localhost/db1", function(err) {
if(!err){
var schema = new mongoose.Schema({ age:Number, name: String});
var temp = mongoose.model('temp', schema);
//使用链式写法
new temp({age:10,name:'save'}).save(function(err,doc){
//[ { _id: 59720bc0d2b1125cbcd60b3f, age: 10, name: 'save', __v: 0 } ]
console.log(doc);
});
}
});
create()
使用save()方法,需要先实例化为文档,再使用save()方法保存文档。而create()方法,则直接在模型Model上操作,并且可以==同时新增多个文档==
Model.create(doc(s), [callback])
新增{name:"xiaowang"},{name:"xiaoli"}这两个文档
var mongoose = require('mongoose');
mongoose.connect("mongodb://u1:123456@localhost/db1", function(err) {
if(!err){
var schema = new mongoose.Schema({ age:Number, name: String});
var temp = mongoose.model('temp', schema);
temp.create({name:"xiaowang"},{name:"xiaoli"},function(err,doc1,doc2){
//{ __v: 0, name: 'xiaowang', _id: 59720d83ad8a953f5cd04664 }
console.log(doc1);
//{ __v: 0, name: 'xiaoli', _id: 59720d83ad8a953f5cd04665 }
console.log(doc2);
});
}
});
insertMany()
Model.insertMany(doc(s), [options], [callback])
新增{name:"a"},{name:"b"}这两个文档
var mongoose = require('mongoose');
mongoose.connect("mongodb://u1:123456@localhost/db1", function(err) {
if(!err){
var schema = new mongoose.Schema({ age:Number, name: String});
var temp = mongoose.model('temp', schema);
temp.insertMany([{name:"a"},{name:"b"}],function(err,docs){
//[ { __v: 0, name: 'a', _id: 59720ea1bbf5792af824b30c },
//{ __v: 0, name: 'b', _id: 59720ea1bbf5792af824b30d } ]
console.log(docs);
});
}
});
文档删除
有三种方法用于文档删除
remove()
findOneAndRemove()
findByIdAndRemove()
remove()
remove有两种形式,一种是文档的remove()方法,一种是Model的remove()方法
下面介绍Model的remove()方法,该方法的第一个参数conditions为查询条件,第二个参数回调函数的形式如下function(err){}
model.remove(conditions, [callback])
删除数据库中名称包括'30'的数据
temp.remove({name:/30/},function(err){})
[注意]remove()方法中的回调函数不能省略,否则数据不会被删除。当然,可以使用exec()方法来简写代码
temp.remove({name:/30/}).exec()
下面介绍文档的remove()方法,该方法的参数回调函数的形式如下function(err,doc){}
document.remove([callback])
删除数据库中名称包含'huo'的数据
[注意]文档的remove()方法的回调函数参数可以省略
temp.find({name:/huo/},function(err,doc){
doc.forEach(function(item,index,arr){
item.remove(function(err,doc){
//{ _id: 5971f93be6f98ec60e3dc86c, name: 'huochai', age: 30 }
//{ _id: 5971f93be6f98ec60e3dc86e, name: 'huo', age: 60 }
console.log(doc);
})
})
})
findOneAndRemove()
model的remove()会删除符合条件的所有数据,如果只删除符合条件的第一条数据,则可以使用model的findOneAndRemove()方法
Model.findOneAndRemove(conditions, [options], [callback])
集合temps现有数据如下
现在删除第一个年龄小于20的数据
temp.findOneAndRemove({age:{$lt:20}},function(err,doc){
//{ _id: 5972d3f3e6f98ec60e3dc873, name: 'wang', age: 18 }
console.log(doc);
})
与model的remove()方法相同,回调函数不能省略,否则数据不会被删除。当然,可以使用exec()方法来简写代码
temp.findOneAndRemove({age:{$lt:20}}).exec()
findByIdAndRemove()
Model.findByIdAndRemove(id, [options], [callback])
删除第0个元素
var aIDArr = [];
temp.find(function(err,docs){
docs.forEach(function(item,index,arr){
aIDArr.push(item._id);
})
temp.findByIdAndRemove(aIDArr[0],function(err,doc){
//{ _id: 5972d754e6f98ec60e3dc882, name: 'huochai', age: 27 }
console.log(doc);
})
})
类似的,该方法也不能省略回调函数,否则数据不会被删除。当然,可以使用exec()方法来简写代码
var aIDArr = [];
temp.find(function(err,docs){
docs.forEach(function(item,index,arr){
aIDArr.push(item._id);
})
temp.findByIdAndRemove(aIDArr[0]).exec()
})
Last updated
Was this helpful?