gpt4 book ai didi

mongodb - 在 MongoDB 聚合中返回整个对象

转载 作者:可可西里 更新时间:2023-11-01 09:20:45 25 4
gpt4 key购买 nike

我有项目架构,其中我有各个餐厅的项目详细信息。我必须找到特定餐厅的所有项目,并使用“类型”和“类别”按它们分组(类型和类别是项目模式中的字段),我可以根据需要对项目进行分组,但我无法获得完整的项目目的。我的查询:

db.items.aggregate([{
'$match': {
'restaurant': ObjectId("551111450712235c81620a57")
}
}, {
'$group': {
id: {
'$push': '$_id'
}
, _id: {
type: '$type'
, category: '$category'
}
}
}, {
$project: {
id: '$id'
}
}])

我见过一种方法,将每个字段值添加到组中,然后对其进行投影。由于我的 Item 模式中有很多字段,我觉得这对我来说不是很好的解决方案,我能否获得完整的对象而不是仅获得 ID。

最佳答案

好吧,你总是可以使用 $$ROOT前提是您的服务器是 MongoDB 2.6 或更高版本:

db.items.aggregate([
{ '$match': {'restaurant': ObjectId("551111450712235c81620a57")}},
{ '$group':{
_id : {
type : '$type',
category : '$category'
},
id: { '$push': '$$ROOT' },
}}
])

这将把每个完整的对象放入数组的成员中。

执行此操作时需要小心,因为如果结果较大,您肯定会打破 BSON 限制。

我建议您尝试构建某种具有“方面计数”或类似内容的“搜索结果”。为此,您最好为“聚合”部分运行一个单独的查询,并为实际文档结果运行一个查询。

与尝试将所有内容组合在一起相比,这是一种更安全、更灵活的方法。

关于mongodb - 在 MongoDB 聚合中返回整个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32065276/

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