例如,我有以下数据:
{
"_id": "1",
"checker": true,
"app": "firstApp",
"changes": [
{
"old": "testOld",
"new": "testNew"
},
{
"old": "firstAppOld",
"new": "firstAppNew"
}
]
},
{
"_id": "2",
"checker": false,
"app": "secondApp",
"changes": ""
}
我想要的是动态地$展开这个数据。如果 “checker” = true,那么{$展开:“$changes”},否则{$unwind:“$app”}。或者如果 “checker” =真,则{$unwind:“$changes”},否则不执行任何操作。
我尝试添加一个字段:
{$addFields: {
path: {
$cond: {
if: {$eq: ["$checker", true]},
then: '$changes',
else: '$app'
}
}
}}
然后:
{$unwind: "$path"}
但我得到了这样的东西:
{
"_id": "1",
"checker": true,
"app": "firstApp",
"changes": [
{
"old": "testOld",
"new": "testNew"
},
{
"old": "firstAppOld",
"new": "firstAppNew"
}
],
"path": {
"old": "testOld",
"new": "testNew"
}
},
{
"_id": "2",
"checker": false,
"app": "secondApp",
"changes": "",
"path": "secondApp"
}
1条答案
按热度按时间9lowa7mx1#
$unwind stage接受字符串路径,而不是表达式,因此不能直接将变量传递给stage。
但是,您可以在展开阶段之前修改文档,例如:
可能是这样的:
Playground