首页 > 解决方案 > MongoDB 如何处理不存在的数组元素上的 $addFields

问题描述

如果我将$addFields一个实际上不存在的元素用作聚合阶段,Mongo 将如何处理呢?

我问是因为,在我的数据中,对于一个数组的特定字段,一些文档有 1 个数组元素,而其他文档有 2 或 3 个(所以位置 0、1 和 2)。

所以如果我这样做:

$addFields : {
    secondAgency: {$arrayElemAt:["$agency", 1]},
}

Mongo 将如何处理代理数组位置 1 中没有元素的文档?有没有一种方法可以通过条件检查来处理这个问题——如果数组的位置 1 有一个数组元素,则只包含这个字段?

标签: mongodbaggregation-framework

解决方案


它只会忽略该值并且不会添加此类字段。要添加默认值,请使用$ifNull

db.getCollection('x').aggregate([
    {$addFields: {
        secondAgency1:            {$arrayElemAt: ["$agency", 1]},
        secondAgency2: {$ifNull: [{$arrayElemAt: ["$agency", 1]}, "DEFAULT"]}
    }}
])

推荐阅读