在MongoDB聚合中返回整个对象

在MongoDB聚合中返回整个对象,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我有一个项目模式,其中我有各个餐厅的项目详细信息。我必须找到特定餐厅的所有项目,并使用“类型”和“类别”(类型和类别是项目架构中的字段)对其进行分组,我可以根据需要对项目进行分组,但无法获得完整的项目对象。 我的问题是: db.items.aggregate([{ '$match': { 'restaurant': ObjectId("551111450712235c81620a57") } }, { '$group': { id: {

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

db.items.aggregate([{
    '$match': {
        'restaurant': ObjectId("551111450712235c81620a57")
    }
}, {
    '$group': {
        id: {
            '$push': '$_id'
        }
        , _id: {
            type: '$type'
            , category: '$category'
        }
    }
}, {
    $project: {
        id: '$id'
    }
}])
我见过一种方法,将每个字段值添加到组中,然后投影它。由于我的项目架构中有许多字段,我觉得这对我来说不是一个好的解决方案,我可以获得完整的对象而不是仅ID。

如果您的服务器是MongoDB 2.6或更高版本,您可以随时使用:

db.items.aggregate([
{'match':{'restaurant':ObjectId(“551111450712235c81620a57”)},
{'$group':{
_身份证:{
类型:“$type”,
类别:“$category”
},
id:{'$push':'$$ROOT'},
}}
])
它将把所有对象放入数组的成员中

在进行此操作时需要小心,因为对于较大的结果,您肯定会突破BSON限制

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


这是一种比试图将所有东西组合在一起更安全、更灵活的方法。

谢谢@Blakes Seven我今天学到了一个新东西。这对我有帮助,但我已经完成了{'$push':'$$ROOT'},因为只添加$ROOT会得到空结果。