Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 如何在嵌套数组中查找(至少两级)_Mongodb_Mongodb Query_Aggregation Framework - Fatal编程技术网

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

Mongodb 如何在嵌套数组中查找(至少两级),mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我有以下json: { "_id" : ObjectId("561f7896d3e4d2d8a6406baa"), "array" : [ { "inProgress" : false "array2" : [ { "taskId" : 1, "finished" : false

我有以下json:

{
    "_id" : ObjectId("561f7896d3e4d2d8a6406baa"),
    "array" : [ 
        {
          "inProgress" : false
            "array2" : [ 
                {
                    "taskId" : 1,
                    "finished" : false
                }
            ]
        }
    ]
} 
我需要找到并测试这两个标志(inProgress和finished)是否为真。如何做到这一点?不管怎样,我试过了,用find,elemmatch。。。无济于事

我不能丢失文件的结构


谢谢。

考虑到以下数据集:

[
  {
    "_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
      }
    ]
  }
]

请编辑问题以显示您尝试了什么,并显示您遇到的具体障碍。有关更多信息,请参阅。谢谢。但现在的问题是,当finished为false时,它会将array2留空。如何解决?我们的想法是在这两个标志之间进行过滤,就像它是一个and(inProgress&finished)一样。您想检查inProgress=true或isFinished=true以返回完整文档,如果其中任何一个为true,则返回完整文档,而不是两个都为true?都为true。但是,当我有一个带有“finished”:false的记录时,我不能返回$array2[],而是隐藏$array。我需要在array2为空时,不返回这个结构块(finished:false)。谢谢,完成了。这是得到我需要的结果的唯一解决方案吗?