如何在嵌套数组中查找(至少两个级别)

时间:2019-09-06 03:00:24

标签: mongodb mongodb-query aggregation-framework

我有以下json:

{
    "_id" : ObjectId("561f7896d3e4d2d8a6406baa"),
    "array" : [ 
        {
          "inProgress" : false
            "array2" : [ 
                {
                    "taskId" : 1,
                    "finished" : false
                }
            ]
        }
    ]
} 

我需要查找并测试两个标志(正在进行和完成)是否为真。这该怎么做?无论如何,我还是尝试了,找到了,elemmatch……无济于事。

我不会丢失文档的结构。

谢谢。

1 个答案:

答案 0 :(得分:0)

考虑以下数据集:

[
  {
    "_id": "561f7896d3e4d2d8a6406baa",
    "array": [
      {
        "inProgress": true,
        "array2": [
          {
            "taskId": 1,
            "finished": true
          }
        ]
      }
    ]
  }
]

使用聚合管道以以下方式展开和过滤数组:

db.collection.aggregate([
  {
    $unwind: "$array"
  },
  {
    $match: {
      "array.inProgress": true
    }
  },
  {
    $project: {
      "array.inProgress": 1,
      "array.array2": {
        $filter: {
          input: "$array.array2",
          as: "item",
          cond: {
            $eq: [
              "$$item.finished",
              true
            ]
          }
        }
      }
    }
  },
  {
    $group: {
      _id: "$_id",
      array: {
        $push: "$array"
      }
    }
  }
])

给出输出:

[
  {
    "_id": "561f7896d3e4d2d8a6406baa",
    "array": [
      {
        "array2": [
          {
            "finished": true,
            "taskId": 1
          }
        ],
        "inProgress": true
      }
    ]
  }
]