从数组对象中删除空值 mongodb
Removing null values from array object mongodb
如何使用 updateMany 从该数组中删除空元素?我有许多遵循此模式且具有空值的文档,我想更新所有文档而不使用空值。
{
"car": "Honda",
"color": [
null,
null,
null,
null,
null,
null,
null,
null,
null,
"red",
"orange"
]
}
我试过了
db.db_urls.updateMany({color: null}, { $unset : { color: 1 }})
但它正在删除所有字段的内容
选项 1. 在带有 $filter 的 update() 查询中使用聚合管道:
db.collection.update({
color: {
$exists: true,
$eq: null
}
},
[
{
$addFields: {
color: {
$filter: {
input: "$color",
as: "c",
cond: {
$ne: [
"$$c",
null
]
}
}
}
}
}
],
{
multi: true
})
解释:
- 仅匹配存在颜色数组且至少包含单个空值的文档
- 将颜色数组替换为没有空值的颜色数组
- 添加 {multi:true} 以应用于所有找到的文件
选项 2. 使用 $pull 删除颜色数组中的所有空元素:
db.collection.update({
color: {
$exists: true,
$eq: null
}
},
{
$pull: {
color: null
}
},
{
multi: true
})
解释:
- 匹配所有具有颜色数组和至少一个空元素的文档。
- 删除 ($pull) 所有空颜色数组元素
- 应用于所有匹配的文档(multi:true)
我会使用选项 2,因为它看起来很简单,但在某些情况下,对于更大的集合,$pull 操作可能执行得更慢,因此最好测试一下...
如何使用 updateMany 从该数组中删除空元素?我有许多遵循此模式且具有空值的文档,我想更新所有文档而不使用空值。
{
"car": "Honda",
"color": [
null,
null,
null,
null,
null,
null,
null,
null,
null,
"red",
"orange"
]
}
我试过了
db.db_urls.updateMany({color: null}, { $unset : { color: 1 }})
但它正在删除所有字段的内容
选项 1. 在带有 $filter 的 update() 查询中使用聚合管道:
db.collection.update({
color: {
$exists: true,
$eq: null
}
},
[
{
$addFields: {
color: {
$filter: {
input: "$color",
as: "c",
cond: {
$ne: [
"$$c",
null
]
}
}
}
}
}
],
{
multi: true
})
解释:
- 仅匹配存在颜色数组且至少包含单个空值的文档
- 将颜色数组替换为没有空值的颜色数组
- 添加 {multi:true} 以应用于所有找到的文件
选项 2. 使用 $pull 删除颜色数组中的所有空元素:
db.collection.update({
color: {
$exists: true,
$eq: null
}
},
{
$pull: {
color: null
}
},
{
multi: true
})
解释:
- 匹配所有具有颜色数组和至少一个空元素的文档。
- 删除 ($pull) 所有空颜色数组元素
- 应用于所有匹配的文档(multi:true)
我会使用选项 2,因为它看起来很简单,但在某些情况下,对于更大的集合,$pull 操作可能执行得更慢,因此最好测试一下...