是否可以在 mongo 的组聚合后重命名_id字段?

我有一个这样的查询(简化):

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

我从Java执行此查询,并且我想将其映射到我的类上,但我不想在字段上映射。因为如果我做这样的事情:_idname

@JsonProperty("_id")
private String name;

然后,当我将此数据保存回mongo(经过一些修改后)时,数据将以名称保存,因为我希望生成一个真正的Id。_id

那么,操作后如何重命名_id$group


答案 1

您可以通过在管道的末尾添加一个$project阶段来实现此目的,如下所示:

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

在线试用:mongoplayground.net/p/QpVyh-0I-bP


答案 2

从mongo v3.4开始,你可以结合使用$addFields,以避免编写其中的所有字段可能非常繁琐$project$project

发生这种情况是因为如果您专门包含一个字段,则会自动排除其他字段。$project

例:

{ 
  $addFields: { my_new_id_name: "$_id" }
},
{
  $project: { _id: 0 }
}