【问题标题】:mongodb aggregation on updating collections关于更新集合的 mongodb 聚合
【发布时间】:2018-06-14 19:35:11
【问题描述】:

聚合游标对已使用集合中的 CRUD(remove 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)
});

算法是否有机会打印在其操作过程中添加或更改的记录?

【问题讨论】:

    标签: node.js mongodb node-mongodb-native


    【解决方案1】:

    算法是否有可能打印添加的记录或 在运行过程中发生了变化?

    没有。当执行聚合操作时,将在集合上应用一个意图共享 (IS) 锁,这意味着只有读取操作可以同时发生。任何创建、更新或删除操作都必须等待锁被移除,因为更新操作需要应用排他 (X) 锁。

    参考资料:

    1. MongoDB 锁定类型 - https://docs.mongodb.com/manual/faq/concurrency/#what-type-of-locking-does-mongodb-use

    2. MongoDB Tutorial - MongoDB Locks 示例

    聚合操作处理数据记录并返回计算结果。光标应用于计算结果。聚合后对集合的任何更改都不会影响已经计算的结果。

    【讨论】:

    • 在光标关闭之前锁定是否开启?
    • 我已经更新了答案。我希望这能澄清你的疑问。
    • 计算结果被存储了多久?
    • 光标就像一个缓冲流。完成读取/处理其中的元素后,光标就消失了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-13
    • 2014-05-27
    • 2017-06-27
    • 2021-11-04
    • 1970-01-01
    相关资源
    最近更新 更多