gpt4 book ai didi

javascript - MongoDB:使用 $map 更新查询管道中的对象

转载 作者:太空宇宙 更新时间:2023-11-04 01:27:10 28 4
gpt4 key购买 nike

我有一个从调用 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查询管道函数添加的字段。我正在尝试使用查询管道中的 $maptravel_guess 更新为 ceil(travel_guess):

$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 版,因此我可以使用的查询管道函数也受到限制。

最佳答案

您可以指定 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" }}
]
}
}
}
}}

关于javascript - MongoDB:使用 $map 更新查询管道中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57155668/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com