Mongodb 循环遍历阵列并用新的替换旧的

Mongodb 循环遍历阵列并用新的替换旧的,mongodb,aggregation-framework,aggregate-functions,Mongodb,Aggregation Framework,Aggregate Functions,我正在尝试循环一个数组,并用一个新的替换旧的版本 我使用的代码是: db.cases.aggregate( { $match: { 'companyID': 218 }}, { $unwind: '$cases' }, { $group: { "_id": "$cases.casenumber", cases: {$push:'$cases'}, "count": { $sum:1 }}}, { $match: { "count": { "$gt": 1 }}}

我正在尝试循环一个数组,并用一个新的替换旧的版本

我使用的代码是:

db.cases.aggregate(
    { $match: { 'companyID': 218 }},
    { $unwind: '$cases' }, 
    { $group: { "_id": "$cases.casenumber", cases: {$push:'$cases'}, "count": { $sum:1 }}},
    { $match: { "count": { "$gt": 1 }}}
    { $project: { "cases": { $slice: [ "$cases", -1, { $subtract: [ { $size: "$cases" }, 1 ]}] }}},
    { $project: { "cases": { $arrayElemAt: ['$cases', 0] }}},
    { $group: { _id: 1, cases: {$push:'$cases' }}},
    { $out: 'cases' }
)
问题是$out只是覆盖了cases文档,但是我想保留cases文档,只更新文档中companyID的特定cases数组

以下是文档的外观:

有人对如何做到这一点有什么想法吗


谢谢

您能提供样本文档吗?所有字段上的副本是否相同?如果没有,你怎么知道你需要保留哪个值?@Andrew:你不应该只使用$out来更新集合中文档中的字段,使用它时需要小心,你是否正在更新集合中所有文档中的该字段?如果你必须使用它,请给它起一个不同的名字,比如collection new&一旦一切正常,请重命名它。因为如果您在聚合中意外出错,则整个集合将被替换,此外,如果不存在,您的查询应该创建一个名为
cases
的新集合,如果存在,则将其替换-这就是您要查找的吗?@matthPen因此我从另一个源提取数据存储在Mongodb中,因为使用mongo比不断调用另一个源更快。但是,如果在白天有人将类型的值更改为1(在上图中),然后我再次提取信息,我如何知道它已经在mongo中,需要更新的只是类型字段。