MongoDB 简明教程

MongoDB $addFields

1. $addFields 阶段

$addFields 聚合阶段允许你向文档中添加新的字段。它输出的文档将包含原始文档中的所有现有字段以及新添加的字段。

当你需要在聚合流中根据现有数据计算出新的属性值,而又不想通过 $project 阶段手动列出所有要保留的原始字段时,这个阶段非常高效。

2. 实践示例

在接下来的示例中,我们将使用在“聚合简介”章节中加载的示例数据集 "sample_airbnb" 数据库。

我们将添加一个名为 total_cost(总成本)的新字段,该字段是通过将 price(价格)和 cleaning_fee(清洁费)相加计算得出的。

示例代码

db.listingsAndReviews.aggregate([
  { 
    $addFields: {
      total_cost: { $add: [ "$price", "$cleaning_fee" ] }
    }
  },
  { $limit: 2 },
  { $project: { "name": 1, "total_cost": 1 }}
])

代码解析:

  1. $addFields:定义了一个新字段 total_cost。使用 $add 操作符将文档中现有的 pricecleaning_fee 字段值相加。
  2. $limit:为了便于观察结果,我们将输出限制为 2 条文档。
  3. $project:在这个阶段,我们指定仅在最终结果中显示 name 和我们刚刚创建的 total_cost 字段。

通过这种方式,你可以灵活地在管道中扩展文档的信息维度,而无需改动集合中的原始数据。