Mongo 4.0中不支持更新的聚合管道



下面是我的数据示例:

{
    "_id" : ObjectId("6144f74c066fee820d28b34f"),
    "Login" : ISODate("2021-09-16T21:09:00.000Z"),
    "DiaryNotes" : [ 
        {
            "Message" : "Metus tincidunt ultricies.",
            "Timestamp" : ISODate("1922-07-29T01:42:00.000Z")
        }, 
        {
            "Message" : "Ligula, eleifend ultrices, fames in, est aliquam ex congue.",
            "Timestamp" : ISODate("2022-01-09T12:48:00.000Z")
        }
    ],
}

以下查询适用于Mongo 4.2+:

db.getCollection('Surveys').updateMany({},
[
  {
    $set: {
      DiaryNotes: {
        $filter: {
          input: "$DiaryNotes",
          cond: { $lt: [ "$Login", "$$this.Timestamp" ] }
        }
      }
    }
  }
])

但是如果这个查询是使用Mongo 4.0 API对CosmosDB服务执行的,我得到一个错误:;应为类型对象,但找到了数组"我认为这是因为Mongo 4.0不支持更新聚合管道。

这个查询可以以支持Mongo4.0的方式进行重构吗?

最后我使用了一个简单的forEach循环。效率低下,但达到了我所需要的。

db.getCollection('Surveys').find().forEach(function (doc) {
    var validDiaryNotes = doc.DiaryNotes.filter(d => d.Timestamp > doc.Login);
    var validSMSs = doc.SMSs.filter(s => s.Timestamp > doc.Login);
    db.Surveys.update({ _id: doc._id }, { $set: { "DiaryNotes": validDiaryNotes, "SMSs": validSMSs } });
}
);

最新更新