MongoDB在聚合函数之后从数组中移除空对象

w7t8yxp5  于 2022-11-22  发布在  Go
关注(0)|答案(2)|浏览(157)

db.name.aggregate()函数的输出如下:

[{}, {"abc": "zyx"}, {}, "opk": "tyr"]

所需实际输出:

[{"abc": "zyx"}, "opk": "tyr"]
huwehgph

huwehgph1#

首先,您的输出不是一个有效的数组。它应该是这样的:

[{}, {"abc": "zyx"}, {}, {"opk": "tyr"}]

现在,要获得所需的输出,可以将以下$match级添加到管道中:

db.collection.aggregate([
  {
    "$match": {
      $expr: {
        "$gt": [
          {
            "$size": {
              "$objectToArray": "$$ROOT"
            }
          },
          0
        ]
      }
    }
  }
])

这里,我们使用$objectToArray将文档转换为数组,然后检查该数组的大小是否大于0。只有那些文档保留在输出中。
Playground link.

puruo6ea

puruo6ea2#

如果数据看起来像这样。

[
  {
    "arr": [
      {},
      {
        "abc": "zyx"
      },
      {},
      {
        "opk": "tyr"
      }
    ]
  }
]

这样可以清除空对象的聚集

db.collection.aggregate([
  {
    "$unwind": {
      "path": "$arr",
      
    }
  },
  {
    "$match": {
      arr: {
        "$ne": {}
      }
    }
  },
  {
    "$group": {
      _id: "$_id",
      arr: {
        $push: "$arr"
      }
    }
  }
])

Outputs

[
  {
    "_id": ObjectId("5a934e000102030405000000"),
    "arr": [
      {
        "abc": "zyx"
      },
      {
        "opk": "tyr"
      }
    ]
  }
]

Demo@mongoplayground
https://mongoplayground.net/p/BjGxzlrlj6s

相关问题