问题描述
MongoDB 批量操作有两个选项:
MongoDB bulk operations have two options:
将单个文档更新操作添加到批量操作列表中.该操作可以替换现有文档或更新现有文档中的特定字段.
将单个文档替换操作添加到批量操作列表中.使用 Bulk.find()
方法指定确定要替换哪个文档的条件.Bulk.find.replaceOne()
方法将替换限制为单个文档.
根据文档,这两种方法都可以替换匹配的文档.我是否理解正确,updateOne()
是更通用的方法,它可以完全像 replaceOne()
那样替换文档,或者只是更新其特定字段?
According to the documentation, both of these two methods can replace a matching document. Do I understand correctly, that updateOne()
is more general purpose method, which can either replace the document exactly like replaceOne()
does, or just update its specific fields?
推荐答案
使用 replaceOne()
只能替换整个文档,而 updateOne()
允许更新字段.
With replaceOne()
you can only replace the entire document, while updateOne()
allows for updating fields.
由于 replaceOne()
替换了整个文档 - 旧文档中未包含在新文档中的字段将丢失.使用 updateOne()
可以添加新字段而不会丢失旧文档中的字段.
Since replaceOne()
replaces the entire document - fields in the old document not contained in the new will be lost. With updateOne()
new fields can be added without losing the fields in the old document.
例如,如果您有以下文档:
For example if you have the following document:
{
"_id" : ObjectId("0123456789abcdef01234567"),
"my_test_key3" : 3333
}
使用:
replaceOne({"_id" : ObjectId("0123456789abcdef01234567")}, { "my_test_key4" : 4})
结果:
{
"_id" : ObjectId("0123456789abcdef01234567"),
"my_test_key4" : 4.0
}
使用:
updateOne({"_id" : ObjectId("0123456789abcdef01234567")}, {$set: { "my_test_key4" : 4}})
结果:
{
"_id" : ObjectId("0123456789abcdef01234567"),
"my_test_key3" : 3333.0,
"my_test_key4" : 4.0
}
请注意,使用 updateOne()
,您可以使用 更新文档上的运算符.
Note that with updateOne()
you can use the update operators on documents.
这篇关于MongoDB 中的 replaceOne() 和 updateOne() 有什么区别?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!