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 }}
])代码解析:
- $addFields:定义了一个新字段
total_cost。使用$add操作符将文档中现有的price和cleaning_fee字段值相加。 - $limit:为了便于观察结果,我们将输出限制为 2 条文档。
- $project:在这个阶段,我们指定仅在最终结果中显示
name和我们刚刚创建的total_cost字段。
通过这种方式,你可以灵活地在管道中扩展文档的信息维度,而无需改动集合中的原始数据。