MongoDB支持原子更新.即我可以肯定,当文档更新时,没有其他更新会覆盖我之前的更改.我的问题涉及查询和更新语句的组合,最好通过下面的示例说明.
db.foo.update(
{ state : 1, players: { $size: 2 } } ,
{ $push: { players : { new player document } } },
false , true );
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我只想将一个新玩家推入一个玩家集合,如果玩家数量等于2.鉴于上述查询和更新声明,两个同步更新是否可能将玩家推送到同一个文档,因为在阅读文件时其玩家的大小是2?即整个查询的原子性跨度和更新部分更新语句?
编辑更深入的事件序列:
考虑同时触发相同的更新两次(U1和U2).以下事件顺序是否可能?
最终结果是文档#1包含的玩家多于预期,因为U1和U2都认为文档#1只包含两个玩家.
我在 mongodb-user 组上问过这个问题。http://groups.google.com/group/mongodb-user/browse_thread/thread/e61e220dc0f6f64c
根据Marc(在10gen工作)的回答,我描述的情况不可能发生。
你所描述的情况是不可能的;不存在两次更新修改同一文档的危险。
| 归档时间: |
|
| 查看次数: |
1271 次 |
| 最近记录: |