在 MongoDB 聚合中返回整个对象
Returning whole object in MongoDB aggregation
我有项目架构,其中我有各个餐厅的项目详细信息。我必须找到特定餐厅的所有项目,并使用 'type' 和 'category' 对它们进行分组(类型和类别是项目模式中的字段),我可以根据需要对项目进行分组,但我不能获得完整的项目对象。
我的查询:
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 限制。
我建议您尝试用 "facet counts" 或类似的方法构建某种 "search results"。为此,您最好 运行 对 "aggregation" 部分进行单独查询,对实际文档结果进行单独查询。
与尝试将所有内容组合在一起相比,这是一种更安全、更灵活的方法。
我有项目架构,其中我有各个餐厅的项目详细信息。我必须找到特定餐厅的所有项目,并使用 'type' 和 'category' 对它们进行分组(类型和类别是项目模式中的字段),我可以根据需要对项目进行分组,但我不能获得完整的项目对象。 我的查询:
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 限制。
我建议您尝试用 "facet counts" 或类似的方法构建某种 "search results"。为此,您最好 运行 对 "aggregation" 部分进行单独查询,对实际文档结果进行单独查询。
与尝试将所有内容组合在一起相比,这是一种更安全、更灵活的方法。