下面是我的数据示例:
{
"_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 } });
}
);