微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用mongodb聚合管道从对象内部的对象中删除空字符串和数组?

如何解决如何使用mongodb聚合管道从对象内部的对象中删除空字符串和数组?

我想从对象内的对象中删除任何具有空text字符串的文档。有没有办法使用MongoDB聚合框架做到这一点?在这种情况下,它将是textobject_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",""
              ]
            }
          }
        }
      }
    }
  }
])

MongoDB Playground

如果要投影所有没有空text字符串和空数组的字段,只需添加$ne空数组检查,请使用以下查询:

MongoDB Playground

如果要删除文本字符串为空的任何文档,请使用附加的$ 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"
      }
    }
  }
])

MongoDB Playground

,

您可以使用$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 举报,一经查实,本站将立刻删除。