0

考虑一个集合 student 包含以下文档。

{name:”Nithin”,age:23} 

{name:”Nithin”,age:25} 

{name:”Nithin”,age:28} 

{name:”Nithin”,age:12} 

我想将所有名称为“Nithin”的文档更新为 age=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})更新所有文档的原因是什么?创建单独查询以更新所有文档的动机是什么?是在提高性能吗?

4

3 回答 3

2

最初,在 MongoDB(1.1 之前)的早期阶段,无法更新多个文档。这是 1.1.3 左右添加的功能。

您可以在发行说明中看到它,新功能 268

我猜这默认情况下没有启用,以便与以前的版本向后兼容。

于 2013-05-22T08:34:30.873 回答
1

这可能不是真正的原因,但我发现附加multi参数可以作为一种保护措施,以防止在打算仅更新单个文档时意外更新多个记录,例如UPDATE...SET在未指定附加约束的情况下意外执行 SQL。

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

于 2013-05-22T08:41:45.113 回答
0

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

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

因此,通过明确设置,multi=true您在某种程度上承认了这一事实(嗯,不是真的,但我想这就是精神......)

于 2013-05-22T08:48:32.717 回答