使用mongoose操作MongoDB数据库【mongoose的增删改查】
0 快读了解mongoose的增删改查
1.操作数据库基本步骤
1.1 定义集合中存储数据规则
const userSchema = new mongoose.Schema({ // 说明集合中要存储的字段,字段类型
name: String,
age: Number
});
1.2 利用规则创建集合
let User = mongoose.model('User', userSchema);
- 注意点:只要创建好了模型(User)集合,那么以后就可以使用User来操作这个集合
- 注意点:mongoose会自动将我们制定的集合名称变为复数(users),数据库中的集合名称不是User而是users
1.3 操作文档【数据的增删改查】
2.具体增删改查的方法
2.1 文档的增加
方法一:创建对象,通过模型创建对象(文档),调用文档的save方法保存到数据库中
let u = new User({name: 'Ge', age: 13});
// 保存文档
u.save((err, product)=>{
if (!err) { // 保存文档成功
console.log('保存文档成功', product)
}
})
方法二:利用模型的create方法增加文档。
- 1 插入一条数据
User.create({name:'gege', age: 666}, (err,result)=>{ // 返回错误信息,和结果
if (!err){
console.log("插入成功", result);
}
})
- 2 插入多条数据
User.create([
{name:'gege', age: 666},
{name:'cc', age: 18},
{name:'ww', age: 20},
], (err,result)=>{ // 返回错误信息,和结果
if (!err){
console.log("插入成功", result);
}
})
- 3 除了通过回调函数查询是否成功,还可以通过返回一个promise对象新增
(async ()=>{
let result = await User.create([
{name:'gege', age: 666},
{name:'cc', age: 18},
{name:'ww', age: 20},
])
console.log(result);
})();
2.2 文档的查询
使用find方法 接收三个参数:过滤条件,返回结果的投影条件,回调函数(回调函数接收err,查询到的文档)
User.find({}, {}, (err, docs)=>{
if (!err) {
console.log(docs);
}
})
- 1 指定投影条件查询:只显示name和age,_id不显示
User.find({}, {_id:0, name: 1, age: 1}, (err, docs)=>{
if (!err) {
console.log(docs);
}
})
- 2 指定过滤条件查询:只显示name为gege的人
User.find({name: 'gege'}, {_id:0, name: 1, age: 1}, (err, docs)=>{
if (!err) {
console.log(docs);
}
})
- 3 指定要不要分页查询
User.find({}, {_id:0, name: 1, age: 1}, {skip:0, limit:5}, (err, docs)=>{
if (!err) {
console.log(docs);
}
})
- 4.获取返回的结果查询
(async ()=>{
let resultFind = await User.find({}, {_id:0, name: 1, age: 1}, {skip:0, limit:5})
console.log(resultFind, 'return');
})();
2.3 文档的修改
使用update方法 接收三个参数:更新条件,更新后的内容,额外配置)
- 1 将gege的age改为999.
- 注意点:默认只更新第一条符合条件的数据
User.update({name:'gege'}, {$set: {age: 999}}, (err,docs)=>{
if (!err){
console.log("更新成功");
}
})
- 2 将所有gege的age改为999.
User.update({name:'gege'}, {$set: {age: 999}}, {multi:true}, (err,docs)=>{
if (!err){
console.log("更新成功");
}
})
- 3 除了使用回调函数监听更新成功,还可以使用promise
(async ()=>{
let resultSearch = await User.update({name:'cc'}, {$set: {age: 999}}, {multi:true});
console.log(resultSearch)
})();
2.4 文档的删除
-1 使用remove方法 接收两个参数:删除条件,额外配置)
User.remove({name: 'gege'}, {}, (err, docs)=>{
if(!err){
console.log(err,'删除成功');
}
})
- 2 只删除第一个满足条件的
使用deleteOne方法 接收三个参数:删除条件,额外配置,删除完毕的回调函数)
User.deleteOne({name: 'Ge'}, {justOne:true}, (err, docs)=>{
if(!err){
console.log(err,'删除成功');
}
})
- 3 自调用的删除方法
(async ()=>{
let resultDelete = await User.deleteOne({name: 'cc'});
})();