我正在尝试更新mongo db上的多个文档。哪个是使用multi = true或updateMany方法更好的更新方法?它们之间有什么区别?
答案 0 :(得分:6)
对Blakes Seven的答案进行了扩展,方法的所有update
操作都只是将multi
选项设置为false,如here (github)所示。
反过来,所有updateMany
方法都会将multi
opion设置为true,如here (github)所示。
所以没有“更好”的方法来调用,只需选择你认为适合的情况。
答案 1 :(得分:2)
不同之处在于,默认情况下,update()
仅修改一个与指定过滤器匹配的文档。但是,您可以通过添加modifier {multi: true}
使其修改所有文档。另一方面,updateMany
修改与指定过滤器匹配的所有文档。
答案 2 :(得分:1)
“ updateOne”和“ updateMany”是较新的API,如果可能,应使用它们而不是“ update”。
在“ Mongo权威指南”一书中(同时谈论“ updateOne”):
“更新文档必须包含更新运算符。早期版本的CRUD API未能捕获此类错误。在这种情况下,较早的更新方法将仅完成整个文档的替换。正是这种陷阱导致了创建新的CRUD API。”
— MongoDB:权威指南:功能强大且可扩展的数据存储,作者:Shannon Bradshaw,Eoin Brazil等。
答案 3 :(得分:0)
updateOne()->仅更新集合中的一个文档。
updateMany()->使用给定的过滤器更新集合中的许多文档。
答案 4 :(得分:0)
我发现以前的答案中缺少的一个区别是update()
不需要使用$set
,并且没有$set
却实际上擦除了文档中的所有现有数据并将其替换以及您提供的数据。
实际上updateMany()
和updateOne()
需要$set
而没有$set
时,您会得到类似uncaught exception: Error: the update operation document must contain atomic operators
的错误
但这完全取决于您的用例。