mongodb 原生
方法 | 描述 |
---|---|
db.collection.updateOne(<filter>, <update>, <others>) | 根据查询条件,更新结果中的第一篇文档 |
db.collection.updateMany(<filter>, <update>, <others>) | 根据查询条件,更新所有结果 |
过滤条件
同查询一致
更新内容
更多的操作符见:https://docs.mongodb.com/manual/reference/operator/update/
-
字段操作
// 将匹配文档的 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":""} }
-
数组操作
// 向 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:在模型实例中进行更新,然后保存
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:直接使用函数进行更新
// <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();
-
这种方式与原生的区别:
_id
可以直接使用字符串进行匹配doc
中可以省略$set
,直接更改即可- 默认情况下,不会触发验证,需要在
options
设置runValidators: true
开启验证
MongoDB👉 查询文档
上一篇