首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么mongodb只更新集合中的第一个匹配文档?

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

Stack Overflow用户
提问于 2013-05-22 08:25:22
回答 3查看 778关注 0票数 0

假设集合学生包含以下文档。

代码语言:javascript
复制
{name:”Nithin”,age:23} 

{name:”Nithin”,age:25} 

{name:”Nithin”,age:28} 

{name:”Nithin”,age:12} 

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

代码语言:javascript
复制
db.student.update({name:”Nithin”},{age:60})

要更新所有文档,我必须使用查询

代码语言:javascript
复制
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})更新所有文档的原因是什么?创建用于更新所有文档的单独查询的动机是什么?它能提高性能吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-22 08:34:30

最初,在MongoDB (pre1.1)的早期,不可能更新多个文档。这是一个在1.1.3左右增加的特性。

你可以在发布说明新功能268中看到它。

我猜想,在默认情况下,由于与以前的版本没有向后兼容性,所以没有启用此功能。

票数 2
EN

Stack Overflow用户

发布于 2013-05-22 08:41:45

这可能并不是真正的原因,但我发现附加的multi参数是一种安全措施,可以防止在只更新单个文档时意外更新多条记录,比如在不指定额外约束的情况下意外地在SQL上执行UPDATE...SET

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

票数 1
EN

Stack Overflow用户

发布于 2013-05-22 08:48:32

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

实际上,在长时间更新期间,MongoDB会周期性地向其他查询提供控制,这些查询可能会修改相同的数据集。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16686922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档