zul*_*kha 3 mongodb mongodb-query aggregation-framework
我有项目架构,其中我有各自餐厅的项目详细信息.我必须通过'类型'和'类别'找到特定餐厅和团体的所有项目(类型和类别是项目架构中的字段),我能够按照我的要求对项目进行分组,但我无法获得完整的项目宾语.我的查询:
db.items.aggregate([{
'$match': {
'restaurant': ObjectId("551111450712235c81620a57")
}
}, {
'$group': {
id: {
'$push': '$_id'
}
, _id: {
type: '$type'
, category: '$category'
}
}
}, {
$project: {
id: '$id'
}
}])
Run Code Online (Sandbox Code Playgroud)
我已经看到一种方法,通过将每个字段值添加到组然后投影它.因为我的Item模式中有很多字段,所以我觉得这对我来说不是很好的解决方案,我是否可以获得完整的对象而不是Ids.
那么你总是可以使用$$ROOT你的服务器是MongoDB 2.6或更高版本:
db.items.aggregate([
{ '$match': {'restaurant': ObjectId("551111450712235c81620a57")}},
{ '$group':{
_id : {
type : '$type',
category : '$category'
},
id: { '$push': '$$ROOT' },
}}
])
Run Code Online (Sandbox Code Playgroud)
这将把每个整个对象放入数组的成员中.
这样做时需要小心,因为更大的结果肯定会破坏BSON限制.
我建议您尝试构建某种"搜索结果",其中包括"facet count"或类似内容.为此,您最好为"聚合"部分运行单独的查询,为实际文档结果运行一个查询.
这比将所有内容组合在一起更加安全和灵活.
| 归档时间: |
|
| 查看次数: |
3144 次 |
| 最近记录: |