我有以下的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/来判断数据集.

推荐答案

我认为你想要:

db.collection.find(
  {"arr.age": {$not: {$gt: threshold}}},
  {arr: {$first: "$arr"}} // This part is relevant if you want only the first item of the array, as seen in your example
)

看看它在mongoDB playground号公路上是如何工作的

Mongodb相关问答推荐

基于另一子文档更改子文档的引用

MongoDB$unionWith,如何 Select 特定文档

为什么这个查询可以在MongoDB中使用?

在不知道字段名称的情况下如何引用 MongoDB 中的字段?

Mongoose 查询以获取内部数组和该内部数组中的特定元素

mongoDB中数组中的聚合和元素

在 ExpirePolicy 之后从 Store 中删除元素

DB 中的引用对象在 GraphQL 查询中返回 null

如何将以下聚合查询转换为 bson 并在 golang 中执行

连接到远程 mongo 服务器导致异常连接失败

使用 MongoDB 进行分页

MongoDB插入引发重复键错误

MongoDB 3 Java判断集合是否存在

带有 jQ​​uery Ajax/JSON 前端的 MongoDB 或 CouchDB 中间件

MongoDb 数据库与集合

如何使用node.js http服务器从mongodb返回大量行?

在MongoDB中查询一个半​​径内的位置

我在更新中对 $set 和 $inc 做错了什么

按 id 删除记录?

Mongodb同时在多个字段上聚合(计数)