You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用MongoDB聚合管道将文档所有字段包裹到顶层lead对象

问题与解决方案

需求

假设集合中有以下文档:

[
  {
    "_id": 0,
    "name": "aaaa",
    "phone": 111
  },
  {
    "_id": 1,
    "name": "bbbb",
    "phone": 999
  }
]

需要编写一条MongoDB聚合管道,将每个文档的所有字段包裹到名为lead的顶层根对象中,且无需硬编码任何字段名,预期输出如下:

[
  {
    "lead": {
      "_id": 0,
      "name": "aaaa",
      "phone": 111
    }
  },
  {
    "lead": {
      "_id": 1,
      "name": "bbbb",
      "phone": 999
    }
  }
]

实现方法

可以利用MongoDB的$$ROOT变量(代表当前完整文档)结合$replaceWith聚合阶段来实现,无需指定具体字段:

db.collection.aggregate([
  {
    $replaceWith: { lead: "$$ROOT" }
  }
])

如果需要确保顶层不保留原_id字段(和预期输出完全一致),也可以用$project阶段:

db.collection.aggregate([
  {
    $project: {
      lead: "$$ROOT",
      _id: 0
    }
  }
])

说明

$$ROOT会引用当前处理的整个文档,将其直接赋值给lead字段后,就自动完成了所有字段的包裹,后续文档新增字段也能自动包含,完全不需要修改聚合管道。

内容的提问来源于stack exchange,提问作者Dürrani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 12:07:20