从聚合中返回整个文档

Kin*_*ien 5 mongodb aggregation-framework

我正在使用以下查询来获取数据库中每个帖子的最新评论:

db.comments.aggregate([
    {
        "$match": {
            "post_id": {
                "$in": [ObjectId("52c5ce24dca32d32740c1435"), ObjectId("52c5ce24dca32d32740c15ad")]
            }
        }
     },
     {
         "$sort": {"_id": -1}
     },
     {
        "$group": {
            "_id": "$post_id",
            "lastComment": {
                "$first": "$_id"
            }
        }
     }
])
Run Code Online (Sandbox Code Playgroud)

我希望它返回整个评论的文档,但它只返回_id每个文档的字段.那么将所有最新评论作为整个文档(或至少包括其他一些领域)的正确方法是什么?

Sha*_*had 18

目前,您无法comment通过单个$first运营商获取整个文档.但是您可以_id$group步骤中包含其他必要字段(类似于字段):

{
    "$group": {
        _id: "$post_id",
        lastComment: { "$first": "$_id" },
        field_1: { "$first": "$field_1" },
        field_2: { "$first": "$field_2" },
        // ...
        field_N: { "$first": "$field_N" }
    }
}
Run Code Online (Sandbox Code Playgroud)

根据这个JIRA票证:https://jira.mongodb.org/browse/SERVER-5916,整个文档可以从2.5.3版本的聚合操作返回.可以使用新变量:$$ROOT$$CURRENT:

{
    "$group": {
        _id: "$post_id",
        lastComment: { "$first": "$$CURRENT" }
    }
}
Run Code Online (Sandbox Code Playgroud)