Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.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
Node.js 如何使用$filter从嵌套数组中检索结果?_Node.js_Mongodb_Aggregation Framework - Fatal编程技术网

Node.js 如何使用$filter从嵌套数组中检索结果?

Node.js 如何使用$filter从嵌套数组中检索结果?,node.js,mongodb,aggregation-framework,Node.js,Mongodb,Aggregation Framework,我试图使用MongoDB构建一个查询,但是遇到了一个问题,我无法在数组中过滤数组 在下面的示例中,我试图检索父列表数组中的子数据数组中的元素,其中键systemDelete\u DT为null 我尝试使用$eq:[“$$s\u lists.customData.systemDelete\u DT”,null]作为筛选条件,但是没有加载结果 我使用的是$filter,因为这是带有$lookup的较大聚合的一部分 如何仅从数据数组中检索结果,其中键systemDelete\u DT为null 我的

我试图使用MongoDB构建一个查询,但是遇到了一个问题,我无法在数组中过滤数组

在下面的示例中,我试图检索父
列表
数组中的子
数据
数组中的元素,其中键
systemDelete\u DT
null

我尝试使用
$eq:[“$$s\u lists.customData.systemDelete\u DT”,null]
作为筛选条件,但是没有加载结果

我使用的是
$filter
,因为这是带有
$lookup
的较大聚合的一部分

如何仅从
数据
数组中检索结果,其中键
systemDelete\u DT
null

我的查询

    db.collection.aggregate([
  {
    $lookup: {
      from: "s_list",
      localField: "_id",
      foreignField: "_id",
      as: "s_lists"
    }
  },
  {
    $project: {
      list: {
        $filter: {
          input: {
            $arrayElemAt: [
              "$s_lists.list",
              0
            ]
          },
          as: "s_lists",
          cond: {
           **// Note: This condition works as expected** 
            $eq: [
              "$$s_lists.systemDelete_DT",
              null
            ],
            
          }
        }
      }
    }
  }
])
预期结果:

 [
      {
        "_id": ObjectId("6099619baa04f15c3fb67a83"),
        "list": [
          {
            "_id": ObjectId("609e70be503c58506ca77d3d"),
            "data": [
              {
                "_id": ObjectId("609e70be503c58506ca77d41"),
                "field_id": ObjectId("609c00d6de4c601e4fa358d8"),
                "systemDelete_DT": null
              },
              {
                "_id": ObjectId("609e936024c6a45adc030a4c"),
                "field_id": ObjectId("609e936024c6a45adc030a4b"),
                "systemDelete_DT": null
              }
            ],
            "systemDelete_DT": null
          }
        ]
      }
    ]
数据库示例:

db={
  "collection": [
    {
      "_id": ObjectId("6099619baa04f15c3fb67a83")
    }
  ],
  "s_list": [
    {
      "_id": ObjectId("6099619baa04f15c3fb67a83"),
      "systemDelete_DT": null,
      "list": [
        {
          "_id": ObjectId("609e6ee1955f7b4fbd73fcb5"),
          "systemDelete_DT": "2021-05-14T18:13:18+01:00",
          "data": [
            {
              "_id": ObjectId("609e6ee1955f7b4fbd73fcb6"),
              "systemDelete_DT": "2021-05-14T18:13:18+01:00",
              "field_id": ObjectId("609bbeb0f1033c156f8e4d86"),
              
            },
            {
              "_id": ObjectId("609e6ee1955f7b4fbd73fcb9"),
              "systemDelete_DT": null,
              "field_id": ObjectId("609c00d6de4c601e4fa358d8"),
              
            },
            {
              "_id": ObjectId("609e936024c6a45adc030a4c"),
              "systemDelete_DT": null,
              "field_id": ObjectId("609e936024c6a45adc030a4b"),
              
            }
          ]
        },
        {
          "_id": ObjectId("609e70be503c58506ca77d3d"),
          "systemDelete_DT": null,
          "data": [
            {
              "_id": ObjectId("609e70be503c58506ca77d3e"),
              "systemDelete_DT": "2021-05-14T18:13:18+01:00",
              "field_id": ObjectId("609bbeb0f1033c156f8e4d86"),
              
            },
            {
              "_id": ObjectId("609e70be503c58506ca77d41"),
              "systemDelete_DT": null,
              "field_id": ObjectId("609c00d6de4c601e4fa358d8"),
              
            },
            {
              "_id": ObjectId("609e936024c6a45adc030a4c"),
              "systemDelete_DT": null,
              "field_id": ObjectId("609e936024c6a45adc030a4b"),
              
            }
          ]
        }
      ]
    }
  ]
}
  • $filter
    迭代
    s_列表的循环。使用
    $arrayElemAt
  • $map
    迭代上述过滤列表结果的循环
  • $filter
    迭代内部
    数据的循环
    数组和过滤器空元素
  • $mergeObjects
    将当前字段与上面过滤器中更新的
    数据
    字段合并

  {
    $project: {
      list: {
        $map: {
          input: {
            $filter: {
              input: { $arrayElemAt: ["$s_lists.list", 0] },
              cond: { $eq: ["$$this.systemDelete_DT", null] }
            }
          },
          in: {
            $mergeObjects: [
              "$$this",
              {
                data: {
                  $filter: {
                    input: "$$this.data",
                    cond: { $eq: ["$$this.systemDelete_DT", null] }
                  }
                }
              }
            ]
          }
        }
      }
    }
  }