Mongodb(猫鼬)条件检查没有像我预期的那样工作

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

我有以下 BSON :

[
  {
    arr: [
      {
        age: 24
      },
      {
        age: 55
      }
    ]
  },
  {
    arr: [
      {
        age: 12
      },
      {
        age: 14
      },
      {
        age: 17
      }
    ]
  },
  {
    arr: [
      {
        age: 11
      },
      {
        age: 13
      },
      {
        age: 20
      }
    ]
  }
]

我使用以下查询:

db.collection.find({
  "arr": {
    $elemMatch: {
      age: {
        $lt: 15
      }
    }
  }
},
{
  "arr.$": 1
})

结果是:

[
  {
    "_id": ObjectId("5a934e000102030405000001"),
    "arr": [
      {
        "age": 12
      }
    ]
  },
  {
    "_id": ObjectId("5a934e000102030405000002"),
    "arr": [
      {
        "age": 11
      }
    ]
  }
]

我的挑战是,如果每个 arr 数组中的所有元素都小于 15,则返回它们,而不是当其中一个元素小于 15 时返回。因此,在这种情况下,我的期望答案是一个空数组,因为输出并非全部每个数组的元素的年龄值都在 15 岁以下。 我不确定在这种情况下是否需要使用 $elemMatch。如果有其他方法可以做到这一点,请告诉我。我只想将解决方案作为查询结果而不是在后处理中进行 JavaScript 操作。 顺便说一下,我使用

https://mongoplayground.net/
检查数据集。

mongodb search
1个回答
0
投票

我想你想要:

db.collection.find(
  {"arr.age": {$not: {$gt: threshold}}},
  {arr: {$first: "$arr"}}
)

查看它在 mongoDB Playground 上的工作原理

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