如何将元素添加到 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 来操作它)。
在 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 来操作它)。