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

新手上路,请多包涵

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

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

我从 Java 执行此查询,我想将其映射到我的类,但我不希望 _id 映射到 name 字段。因为如果我这样做:

 @JsonProperty("_id")
private String name;

然后,当我将这些数据保存回 mongo 时(经过一些修改),数据被保存为 _id 而我想要生成一个真实的 Id。

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

原文由 mykola 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 663
2 个回答

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

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

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

原文由 felix 发布,翻译遵循 CC BY-SA 4.0 许可协议

从 mongo v3.4 开始,您可以将 $addFields$project 结合使用,以避免将所有字段写入 $project 中,这可能 非常乏味

这发生在 $project 因为如果你特别包含一个字段,其他字段将被自动排除。

例子:

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

原文由 Manuel Spigolon 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题