2017-04-21 176 views
4

我有这样一个查询(简体):mongo的组聚合后,是否可以重命名_id字段?

db.report.aggregate([{ 
     $match: { 
      main_id: ObjectId("58f0f67f50c6af16709fd2c7") 
     } 
    }, { 
     $group: { 
      _id: "$name", 
      count: { 
       $sum: 1 
      }, 
      sum: { 
       $sum: { 
        $add: ["$P31", "$P32"] 
       } 
      } 
     } 
    } 
]) 

我从Java这个查询,我要地图它在我的课,但我不希望“_id”对'被映射名称“字段。因为如果我做这样的事情:

@JsonProperty("_id") 
private String name; 

然后当我保存这个数据传回蒙戈(一些修改后)的数据将保存名称为“_id”,而我想会产生真实身份。

所以,我怎么能$组术后重命名“_id”?

+0

[$项目(https://docs.mongodb.com/manual/reference/operator/aggregation/project/)它在管道 –

回答

9

您可以通过在你的管道像这样的结尾处添加一个$project阶段实现这一目标:

{ $project: { 
     _id: 0, 
     name: "$_id", 
     count: 1, 
     sum: 1 
    } 
} 
+0

下一个阶段你确定关于'name:“$ name”' - 在小组阶段之后,不再有名字字段。可能需要的是'name:“$ _id”'? –

+0

@VinceBowdren哦,你的权利,我的坏。我已经更新了答案 – felix

1

从蒙戈V3.4,你可以在$project结合使用$addFields避免编写所有$project可能是非常单调

这发生在$project因为如果具体包括一个领域,其他领域将被自动排除。

例子:

{ 
    $addFields: { my_new_id_name: "$_id" } 
}, 
{ 
    $project: { _id: 0 } 
} 
相关问题