如何解决如何使用mongodb聚合管道从对象内部的对象中删除空字符串和数组?
我想从对象内的对象中删除任何具有空text
字符串的文档。有没有办法使用MongoDB聚合框架做到这一点?在这种情况下,它将是text
和object_1
中的object_2
。
"array_of_objects":[{
"city": "Seattle","array_1": [],"object_1":{
"name": "Mandy","text" "",},"object_2":{
"name": "Billy",}]
解决方法
如果要投影所有没有空text
字符串的字段,请使用以下查询。
db.collection.aggregate([
{
$unwind: "$array_of_objects"
},{
$project: {
array_of_objects: {
$arrayToObject: {
$filter: {
input: {
$objectToArray: "$array_of_objects"
},cond: {
$ne: [
"$$this.v.text",""
]
}
}
}
}
}
}
])
如果要投影所有没有空text
字符串和空数组的字段,只需添加$ne
空数组检查,请使用以下查询:
如果要删除文本字符串为空的任何文档,请使用附加的$ match阶段删除文本字符串为空的文档。
db.collection.aggregate([
{
$unwind: "$array_of_objects"
},{
$project: {
array_of_objects: {
$filter: {
input: {
$objectToArray: "$array_of_objects"
},cond: {
$and: [
{
$ne: [
"$$this.v.text",""
]
},{
$ne: [
"$$this.v",[]
]
}
]
}
}
}
}
},{
$match: {
"array_of_objects.v.text": {
$exists: true
}
}
},{
$project: {
array_of_objects: {
"$arrayToObject": "$array_of_objects"
}
}
}
])
,
您可以使用$pull
运算符删除text
字段为空的子文档-
var query = {};
var update = {
$pull: {
array_of_objects: {
'object_1.text': '','object_2.text': ''
}
}
};
var options = {
multi: true
};
db.collection.update(query,update,options);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。