使用mongoose操作MongoDB数据库【mongoose的增删改查】

  • 0 快读了解mongoose的增删改查
  • 1.操作数据库基本步骤
  • 1.1 定义集合中存储数据规则
  • 1.2 利用规则创建集合
  • 1.3 操作文档【数据的增删改查】
  • 2.具体增删改查的方法
  • 2.1 文档的增加
  • 2.2 文档的查询
  • 2.3 文档的修改
  • 2.4 文档的删除


0 快读了解mongoose的增删改查

mongodb 设置数据库名称 mongodb修改数据库名称_mongodb 设置数据库名称

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'});
})();