代码之家  ›  专栏  ›  技术社区  ›  sam

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

  •  0
  • sam  · 技术社区  · 2 年前

    我有以下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?

    因此,我的预期输出:

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

    如果有可能用一个发现来压平数组,那也太好了。

    1 回复  |  直到 2 年前
        1
  •  1
  •   Yong Shun    2 年前

    您可以使用 $filter 运算符来过滤投影中阵列中的元素。

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

    Demo @ Mongo Playground