如何将元素添加到 Mongo 中的 'root' 上的数组

How to add elements to an array on a 'root' in Mongo

在 mongo 中,我在执行查询时不断收集数据,然后使用组来跟踪我需要维护的属性。在我的例子中,有大量数据的患者记录,然后当我得到药物时,我必须对我需要保留的每个属性进行分组。

下面是一个例子。

{
        $group:{
            "_id":"$_id",
            "firstName":{$first:"$firstName"},
            "lastName":{$first:"$lastName"},
            "conditions":{$first:"$conditions"},
            "provider":{$first:"$provider"},
            "plans":{$first:"$plans"},
            "orgs":{$first:"$orgs"},
        }
    }

我想做的是:

  { 
      $group: { _id: "$Id", results: { $first: '$$ROOT' } } ,
      $replaceRoot: { newRoot: '$results' } 
}

这似乎有些过分,但这是我找到 'maintain' 完整患者信息的唯一方法。

有没有办法不用替换就可以做到这一点?

原因是我想将药物添加到患者记录中,而我可以使用第一种方法添加它:

{
        $group:{
            "_id":"$_id",
            "firstName":{$first:"$firstName"},
            "lastName":{$first:"$lastName"},
            "conditions":{$first:"$conditions"},
            "provider":{$first:"$provider"},
            "plans":{$first:"$plans"},
            "orgs":{$first:"$orgs"},
            "medications":{
                $push:"$medications"
            }
        }
    }

我不能这样做:

{ 
      $group: { _id: "$Id", 
          results: { $first: '$$ROOT' },
          "medications":{
                $push:"$medications"
           }
           ,
      $replaceRoot: { newRoot: '$results' } 
}

但是在对根执行结果时不允许添加 'attributes'。

有什么建议吗?也许有一种方法让 $group 只复制所有属性而不是命名每个属性?

你可以试试这个:

   {
    $group: {
        _id: "$Id", "medications": {
            $push: "$medications"
        }, results: { $first: '$$ROOT' }
    } ,
    { $addFields: { 'results.medications': '$medications' } },
    $replaceRoot: { newRoot: '$results' }
}

但这里的缺点是 medications 将是所有结果文档的数组,而不管是否有多个基于组操作的 values/single/empty(如果你不需要它,那么你可以在addFields 来操作它)。