MongoDB中批量操作的隔离

Posted

技术标签:

【中文标题】MongoDB中批量操作的隔离【英文标题】:Isolation of bulk operations in MongoDB 【发布时间】:2014-12-31 19:46:42 【问题描述】:

2.6 中有一种称为bulk operations 的新操作。它类似于我的事务 - 用户可以指定一组写入并随后执行它们,如下所述

var bulk = db.users.initializeOrderedBulkOp();
bulk.insert(  user: "abc123", status: "A", points: 0  );
bulk.insert(  user: "ijk123", status: "A", points: 0  );
bulk.insert(  user: "mop123", status: "P", points: 0  );
bulk.find(  status: "D"  ).remove();
bulk.find(  status: "P"  ).update(  $set:  comment: "Pending"   );
bulk.execute();

批量操作是原子的吗?潜在消费者是否会体验不可重复或幻读?

【问题讨论】:

【参考方案1】:

来自 mongo 文档: 对单个文档的操作对于 MongoDB 数据库始终是原子的,但是,涉及多个文档的操作(通常称为“多文档事务”)不是原子的。

有序与无序操作

批量写入操作可以是有序的或无序的。使用有序的操作列表,MongoDB 会按顺序执行操作。如果在处理其中一个写操作的过程中发生错误,MongoDB 将返回 without processing any remaining write operations in the list

http://docs.mongodb.org/manual/core/bulk-write-operations/

结论:批量操作中没有交易

【讨论】:

以上是关于MongoDB中批量操作的隔离的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB批量操作隐含的特性

MongoDB怎样批量执行命令

MongoDB 批量写操作

有啥方法可以使用 mongoose 从 mongodb 批量操作中获取修改后的 IDS?

C# mongodb driver 2.0 - 如何在批量操作中更新插入?

mongodb批量操作, bulk_write,