mongodb 原生

方法 描述
db.collection.updateOne(<filter>, <update>, <others>) 根据查询条件,更新结果中的第一篇文档
db.collection.updateMany(<filter>, <update>, <others>) 根据查询条件,更新所有结果

过滤条件

同查询一致

更新内容

更多的操作符见:https://docs.mongodb.com/manual/reference/operator/update/

  1. 字段操作

    // 将匹配文档的 name 设置为 邓哥,address.city 设置为 哈尔滨
    {
      $set: { name:"邓哥", "address.city": "哈尔滨" }
    }
    
    // 将匹配文档的 name 设置为 邓哥,并将其年龄增加2
    {
      $set: { name:"邓哥" },
      $inc: { age: 2 }
    }
    
    // 将匹配文档的 name 设置为 邓哥,并将其年龄乘以2
    {
      $set: { name:"邓哥" },
      $mul: { age: 2 }
    }
    
    // 将匹配文档的 name 字段修改为 fullname
    {
      $rename: { name: "fullname" }
    }
    
    // 将匹配文档的 age 字段、address.province 字段 删除
    {
      $unset: {age:"", "address.province":""}
    }
    
  2. 数组操作

    // 向 loves 添加一项:秋葵
    // 若数组中不存在则进行添加 若存在则不进行任何操作
    {
      $addToSet: {
        loves: "秋葵"
      }
    }
    
    // 向 loves 添加一项:秋葵
    // 无论数组中是否存在,都必定会添加
    {
      $push: {
        loves: "秋葵"
      }
    }
    
    // 向 loves 添加多项:秋葵 香菜
    {
      $push: {
        loves: { $each: ["秋葵", "香菜"]}
      }
    }
    
    // 删除 loves 中满足条件的项: 是秋葵 或 香菜
    {
      $pull: {
        loves: {$in: ["秋葵","香菜"]}
      }
    }
    
    // 将所有loves中的 其他 修改为 other
    // 该操作符需要配合查询条件使用
    db.users.updateOne(
      {
        loves: "其他"
      }, 
      {
        $set: { "loves.$": "other" }
      }
    )
    

其他配置

upsert:默认false,若无法找到匹配项,则进行添加

mongoose 操作

  1. 方式 1:在模型实例中进行更新,然后保存

    var { User, Operation } = require("./models");
    
    async function test() {
      const u = await User.findById("5ed093872e3da2b65498347c");
      u.address.province = "黑龙江";
      u.address.city = "哈尔滨";
      u.loves.push("秋葵", "香菜");
      await u.save(); // 此时会自动对比新旧文档,完成更新
    }
    test();
    
  2. 方式 2:直接使用函数进行更新

    // <Model>.updateOne(filter, doc, [options]);
    // <Model>.updateMany(filter, doc, [options]);
    
    var { User, Operation } = require("./models");
    
    async function test() {
      await User.updateOne(
        {
          _id: "5ed093872e3da2b65498347c",
        },
        {
          loginId: "a",
        },
        {
          runValidators: true,
        }
      );
    }
    test();
    
  3. 这种方式与原生的区别:

    • _id 可以直接使用字符串进行匹配
    • doc 中可以省略 $set,直接更改即可
    • 默认情况下,不会触发验证,需要在 options 设置 runValidators: true 开启验证
打赏作者
您的打赏是我前进的动力
微信
支付宝
评论

中午好👏🏻,我是 ✍🏻   疯狂 codding 中...

粽子

这有关于前端开发的技术文档和你分享。

相信你可以在这里找到对你有用的知识和教程。

了解更多

目录

  1. 1. mongodb 原生
    1. 1.1. 过滤条件
    2. 1.2. 更新内容
    3. 1.3. 其他配置
  2. 2. mongoose 操作