MongoDB - 仅使用 find 方法来限制投影中过滤的年龄

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

我有以下 BSON 数据:

[
  {
    "test": 1,
    "arr": [
      {
        age: 24,
        name: "a"
      },
      {
        age: 55,
        name: "b"
      },
      {
        age: 12,
        name: "c"
      },
      {
        age: 14,
        name: "d"
      },
      {
        age: 67,
        name: "e"
      }
    ]
  }
]

是否可以仅使用

find
方法来获取
arr
数组中每个数组元素小于 30 的“age”字段?

所以我的预期输出:

[
  {
    "test": 1,
    "arr": [
      {
        age: 24,
        name: "a"
      }
      {
        age: 12,
        name: "c"
      },
      {
        age: 14,
        name: "d"
      }
    ]
  }
]

如果能够通过一个发现来压平数组,那就太好了。

mongodb filter mongodb-query
1个回答
1
投票

您可以使用

$filter
运算符来过滤投影中数组中的元素。

db.collection.find({
  "arr.age": {
    $lt: 30
  }
},
{
  "test": 1,
  "arr": {
    $filter: {
      input: "$arr",
      cond: {
        $lt: [
          "$$this.age",
          30
        ]
      }
    }
  }
})

演示@Mongo Playground

© www.soinside.com 2019 - 2024. All rights reserved.