考虑收集学生包含以下文件。
{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})来更新所有文档的原因是什么?创建单独查询以更新所有文档的动机是什么?它是否改善了性能?
答案 0 :(得分:2)
最初,在MongoDB的早期阶段(1.1之前版本),无法更新多个文档。这是1.1.3附近增加的一项功能。
您可以在release notes,New Feature 268。
中看到它我猜这是默认情况下未启用此功能以向后兼容以前的版本。
答案 1 :(得分:1)
这可能不是真正的原因,但我发现额外的multi
参数可以防止意外更新单个文档时意外更新多条记录,例如意外执行UPDATE...SET
在SQL上没有指定其他约束。
这只是一个假设,但可能并非如此。
答案 2 :(得分:0)
我认为部分原因可能是为了避免来自SQL世界的人将多文档更新视为孤立事务。
事实上,在长时间更新期间,MongoDB会定期控制其他可能修改相同数据集的查询。
所以,通过明确地设置multi=true
,你有点承认这个事实(好吧,不是真的,但我猜这是精神......)