MongoDB如何处理不存在的数组元素上的$ addFields

时间:2018-07-20 13:45:23

标签: mongodb aggregation-framework

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

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

所以,如果我这样做:

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

如果代理商阵列的位置1中没有元素,Mongo将如何处理文档?有没有一种方法可以通过条件检查来解决-仅在数组的位置1处存在数组元素时才包括此字段?

1 个答案:

答案 0 :(得分:1)

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

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