我有一个从db.collection.aggregate()
调用返回的对象列表,该调用返回结果对象数组,如下所示:
{ _id: <some_id>,
count: 400,
results:
[
{ _id: 1,
...
travel_guess: 0.1934042214126773,
},
{ _id: 2,
<>
...
travel_guess: 0.8451461966883353,
},
...
}
其中travel_guess
是mongoDB的$geoNear
查询管道函数添加的字段。我试图在查询管道中使用travel_guess
将ceil(travel_guess)
更新为$map
:
$project: {
_id: <some_id>,
count: '$count',
results: {
$map: {
input: '$results',
as: 'result',
in: {
'travel': { $ceil: '$$result.travel_guess' }
}
},
},
}
},
虽然此操作成功更新了travel_guess
,但所有其他字段均被删除,所以我最终得到一个像这样的对象:
{ _id: <some_id>,
total: 400,
results:
[ { travel: 1 },
{ travel: 1 },
{ travel: 1 },
{ travel: 1 },
{ travel: 2 },
{ travel: 2 },
{ travel: 3 },
...
]
}
如何在结果对象中保留其他字段?不幸的是,我只能使用MongoDB 3.4版,因此我只能使用哪些查询管道功能。
答案 0 :(得分:0)
您可以指定in
表达式内的每个字段。像
{ "$project": {
"_id": 1,
"count": "$count",
"results": {
"$map": {
"input": "$results",
"as": "result",
"in": {
"travel": { "$ceil": "$$result.travel_guess" },
"_id": "$$result._id",
"otherField": "$$result.otherField"
}
}
}
}}
如果您不想指向$map
内的每个字段
{ "$project": {
"_id": 1,
"count": "$count",
"results": {
"$map": {
"input": "$results",
"as": "result",
"in": {
"$mergeObjects": [
"$$result",
{ "travel": { "$ceil": "$$result.travel_guess" }}
]
}
}
}
}}