在mongo中,我在执行查询时会不断收集数据,然后使用group跟踪需要维护的属性。以我为例,患者记录具有大量数据,然后在我服药时,我必须将我需要保留的每个属性分组。
下面是一个例子。
{
$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' }
}
这似乎有些过分,但这是我找到“保持”完整患者信息的唯一途径。
是否有一种方法可以执行此操作而不必执行替换操作?
原因是我想将药物添加到患者记录中,而我可以使用第一种方法使用添加药物:
{
$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' }
}
但是在根上执行结果时,不允许添加“属性”。
对此有何建议?也许让$ group只是复制所有命名属性的经节?
答案 0 :(得分:0)
您可以尝试以下方法:
{
$group: {
_id: "$Id", "medications": {
$push: "$medications"
}, results: { $first: '$$ROOT' }
} ,
{ $addFields: { 'results.medications': '$medications' } },
$replaceRoot: { newRoot: '$results' }
}
但是这里的缺点是药物将是所有结果文档的数组,而不管基于组运算的多个值/单个/空(如果您不需要,则可以在addFields上使用cond操纵它)。