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