mongodb - MongoDB 如何处理不存在的数组元素上的 $addFields
问题描述
如果我将$addFields
一个实际上不存在的元素用作聚合阶段,Mongo 将如何处理呢?
我问是因为,在我的数据中,对于一个数组的特定字段,一些文档有 1 个数组元素,而其他文档有 2 或 3 个(所以位置 0、1 和 2)。
所以如果我这样做:
$addFields : {
secondAgency: {$arrayElemAt:["$agency", 1]},
}
Mongo 将如何处理代理数组位置 1 中没有元素的文档?有没有一种方法可以通过条件检查来处理这个问题——如果数组的位置 1 有一个数组元素,则只包含这个字段?
解决方案
它只会忽略该值并且不会添加此类字段。要添加默认值,请使用$ifNull
:
db.getCollection('x').aggregate([
{$addFields: {
secondAgency1: {$arrayElemAt: ["$agency", 1]},
secondAgency2: {$ifNull: [{$arrayElemAt: ["$agency", 1]}, "DEFAULT"]}
}}
])
推荐阅读
- xamarin.forms - Xamarin.Forms 的绑定问题
- html - 如何设置网格模板行/列的属性,以便在没有足够元素的情况下保持居中?
- python - 有没有一种方法可以在不使用 for 循环的情况下制作带有序列号的字符串?
- javascript - 如何在不重新加载页面的情况下修改页面的 URL?
- xpath - 如何在 Google 表格中使用 ImportXML 导入 html-tag 的属性?
- python - 为什么在python中使用Locks进程时,方法无法运行?
- javascript - 使用内容脚本从 chrome 扩展中的当前 DOM 中删除一些元素
- php - 使用 Ajax 列出成员搜索
- notation - 游戏文件解析
- unity3d - 检测悬停在 Oculus Quest (Unity3D) 上的按钮事件