为什么mongodb只更新集合中的第一个匹配文档?

时间:2013-05-22 08:25:23

标签: mongodb

考虑收集学生包含以下文件。

{name:”Nithin”,age:23} 

{name:”Nithin”,age:25} 

{name:”Nithin”,age:28} 

{name:”Nithin”,age:12} 

我想更新名为“Nithin”的所有文件,年龄= 60岁。 如果我们执行以下查询,它将只更新第一个文档。

db.student.update({name:”Nithin”},{age:60})

要更新我必须使用查询的所有文件

db.student.update({name:”Nithin”},{age:60},false,true) 

or 

db.student.update({name:”Nithin”},{age:60},multi:true)

默认mongodb通过执行 db.student.update({name:“Nithin”},{age:60})来更新所有文档的原因是什么?创建单独查询以更新所有文档的动机是什么?它是否改善了性能?

3 个答案:

答案 0 :(得分:2)

最初,在MongoDB的早期阶段(1.1之前版本),无法更新多个文档。这是1.1.3附近增加的一项功能。

您可以在release notesNew Feature 268

中看到它

我猜这是默认情况下未启用此功能以向后兼容以前的版本。

答案 1 :(得分:1)

这可能不是真正的原因,但我发现额外的multi参数可以防止意外更新单个文档时意外更新多条记录,例如意外执行UPDATE...SET在SQL上没有指定其他约束。

这只是一个假设,但可能并非如此。

答案 2 :(得分:0)

我认为部分原因可能是为了避免来自SQL世界的人将多文档更新视为孤立事务。

事实上,在长时间更新期间,MongoDB会定期控制其他可能修改相同数据集的查询。

所以,通过明确地设置multi=true,你有点承认这个事实(好吧,不是真的,但我猜这是精神......)