mongo支持的更新方法:
db.collection.updateOne(, , ):更新一个文档,如:
db.inventory.updateOne(
{ item: "paper" },
{
$set: { "size.uom": "cm", status: "P" },
$currentDate: { lastModified: true }
}
)
表示将item域为paper的文档的size.uom域和status域的值分别更新为cm和P,并且判断lastModified域是否存在,如果存在
直接更新为当前时间,如果不存在,则先创建该域然后更新为当前时间。
注:只会更新第一个匹配的。
db.collection.updateMany(, , ):更新多个文档,如:
db.inventory.updateMany(
{ "qty": { $lt: 50 } },
{
$set: { "size.uom": "in", status: "P" },
$currentDate: { lastModified: true }
}
)
表示将qty域小于50的所有文档的的size.uom域和status域的值分别更新为cm和P,并且判断lastModified域是否存在,如果
存在直接更新为当前时间,如果不存在,则先创建该域然后更新为当前时间。
db.collection.replaceOne(, , ):
(1)如果要替换除主键_id外所有内容,可传给第二个参数一个完整的新的文档。
(2)给此方法传递的第二个参数不能含有操作符,如$or等
注:新的文档可以同要替换的文档拥有不同的域。替换时,新的文档可以遗漏_id主键,但是如果新的文档中含有主键,那么
就一定要和老的文档主键一样,因为_id是不可改变的。
db.inventory.replaceOne(
{ item: "paper" },
{ item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 40 } ] }
)
坑:如果执行修改操作时,传入了主键,那么如果传入的主键与第一个参数匹配的文档主键不一致,则修改操作不会执行。