本文主要介绍MongoDB聚合的$addField阶段的使用方法。
定义
为文档添加新字段,$addFields
阶段输出文档包含了输入文档的全部字段和新增的字段。
$addFields
阶段等价于$project
阶段明确指定了输入文档的所有字段和新增字段。
注意:
MongoDB从4.2版本开始,增加了增加了一个新的阶段$set
,是$addFields
阶段的别名
语法
$addFields
阶段的语法:
{
$addFields: {
<newField>: <expression>, ... } }
指定所有新增字段的名称和值,值可以是表达式或空对象。
重点:
如果新字段的名称与已有字段的名称重复(包括_id
),$addFields
将使用指定表达式的值覆盖已有字段的值。
行为
-
$addFields
阶段可以为文档增加一个或多个新字段。 -
$addFields
阶段存在于聚合操作。 -
$addFields
的值可以接受嵌套对象,也可以是聚合表达式或一个空对象,下面的内嵌对象是可接受的:{ $addFields: { a: { b: { } } } }
添加一个或多个字段到内嵌文档(数组文档)使用点符号。
-
$addFields
与$concatArrays
可以为已有数组字段添加元素。
例子
使用两个$addFields
阶段
集合scores
包含以下文档:
{
_id: 1,
student: "Maya",
homework: [ 10, 5, 10 ],
quiz: [ 10, 8 ],
extraCredit: 0
}
{
_id: 2,
student: "Ryan",
homework: [ 5, 6, 5 ],
quiz: [ 8, 8 ],
extraCredit: 8
}
下面的操作在$addFields
阶段为输出文档增加三个字段:
db.scores.aggregate( [
{
$addFields: {
totalHomework: {
$sum: "$homework" } ,
totalQuiz: {
$sum: "$quiz" }