mongodb 聚合更新集合
mongodb aggregation on updating collections
聚合游标对所用集合中的 CRUD(删除 R)操作有何反应?
例如:
db.collection('aggregate')
.aggregate([
{$match: {}},
{$project:
{ newField: {$literal: "new value"} }
}
]).each(function(err, doc) {
// do editin inserting and removing on 'aggregate' collection
print(doc)
});
算法是否有可能打印在其运行期间添加或更改的记录?
Is there a chance that the algorithm will print records added or
changed during its operation?
没有。执行聚合操作时,将在集合上应用意向共享 (IS) 锁,这意味着只能同时发生读取操作。任何创建、更新或删除操作都必须等待锁被移除,因为更新操作需要应用独占 (X) 锁。
参考资料:
MongoDB 锁定类型 - https://docs.mongodb.com/manual/faq/concurrency/#what-type-of-locking-does-mongodb-use.
聚合操作处理数据记录和return计算结果。光标应用于计算结果。聚合后对集合的任何更改都不会影响已经计算的结果。
聚合游标对所用集合中的 CRUD(删除 R)操作有何反应? 例如:
db.collection('aggregate')
.aggregate([
{$match: {}},
{$project:
{ newField: {$literal: "new value"} }
}
]).each(function(err, doc) {
// do editin inserting and removing on 'aggregate' collection
print(doc)
});
算法是否有可能打印在其运行期间添加或更改的记录?
Is there a chance that the algorithm will print records added or changed during its operation?
没有。执行聚合操作时,将在集合上应用意向共享 (IS) 锁,这意味着只能同时发生读取操作。任何创建、更新或删除操作都必须等待锁被移除,因为更新操作需要应用独占 (X) 锁。
参考资料:
MongoDB 锁定类型 - https://docs.mongodb.com/manual/faq/concurrency/#what-type-of-locking-does-mongodb-use.
聚合操作处理数据记录和return计算结果。光标应用于计算结果。聚合后对集合的任何更改都不会影响已经计算的结果。