从 mongo 聚合查询中嵌套数组内的第一个匹配元素投影属性

问题描述 投票:0回答:1

文档架构:

{,
    "prop1" : "some value",
    "prop2" : "another value",
    "array1" : [
        {
            "field_a" : "value_a",
            "field_b" : "value_b",
            "array2" : [

            ]
        },
        {
            "field_a" : "value_a",
            "filed_b" : "value_b",
            "array2" : [

            ]
        },
        {
            "field_a" : "value_a",
            "field_b" : "value_b",
            "array2" : [
                {
                    "key1" : "value1",
                    "key2" : "value2",
                    "key3" : "value3",
                },
                {
                    "key1" : "value1",
                    "key2" : "value2",
                    "key3" : "value4",
                }
            ]
        },
        {
            "field_a" : "value_a",
            "field_b" : "value_b",
            "array2" : [
                {
                    "key1" : "value1",
                    "key2" : "value2",
                    "key3" : "value3",
                },
                {
                    "key1" : "value1",
                    "key2" : "value2",
                    "key3" : "value4",
                }
            ]
        }
    ],
 
}

我想投影

key1
key2
,其中
key3
value4
,但仅限一次。 当我尝试投影 array.array2
"log": "$array1.array2"
时,它按预期返回:

    "log" : [
        [

        ],
        [

        ],
        [
                {
                    "key1" : "value1",
                    "key2" : "value2",
                    "key3" : "value3",
                },
                {
                    "key1" : "value1",
                    "key2" : "value2",
                    "key3" : "value4",
                }
        ],
        [
                {
                    "key1" : "value1",
                    "key2" : "value2",
                    "key3" : "value3",
                },
                {
                    "key1" : "value1",
                    "key2" : "value2",
                    "key3" : "value4",
                }
        ]
    ],

一些调试,当我尝试使用下面的过滤器查询进行项目时,它正在打印空列表,

      "variable": {
//                  $arrayElemAt: [
//          {
            $filter: {
              input: "$array1.array2",
              as: "response",
              cond: { $eq: ["$$response.key3", "value4"] }
            }
//          },
//          0
//        ]
      },
"variable" : [

    ],

看起来它没有迭代

array2
数组的所有对象。

mongodb mongodb-query aggregation-framework
1个回答
0
投票

一个选项是:

db.collection.aggregate([
  {
    $match: {
      "array1.array2.key3": "value4"
    }
  },
  {
    $set: {
      variable: {
        $first: {
          $filter: {
            input: "$array1.array2",
            cond: {
              $in: [
                "value4",
                "$$this.key3"
              ]
            }
          }
        }
      }
    }
  }
])
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.