Mongodb 检索数组中符合条件的第一个元素

Mongodb Retrieve first element that match condition in array

我在 post 这个问题之前曾尝试阅读,但没能弄明白。

我正在尝试 return 仅匹配数据库中查询中给定条件的第一个元素。

集合文件是这样的:

{
    "key": 1,
    timestamps: {
      history: [
        {
          time: 10
        },
        {
          time: 9
        },
        {
          time: 8
        },
        
      ]
    }
  },

我想检索 history 数组中 timestamp 小于 10 的第一个元素。

所以预期的结果应该是这样的:

[
  {
    "timestamps": {
      "history": [
        {
          "time": 9
        }
      ]
    }
  }
]

你可以在这个 playground 中找到一个例子 https://mongoplayground.net/p/jHKb9o-0tHm .

到目前为止,我能够检索数组中低于 10 的所有元素,但不仅仅是第一个匹配项,我该如何完成?

此外,由于我试图使其尽可能高效,仅检索数据库的第一个元素是否更快,或者它只是对数据库执行的额外操作,因为 [=35 的操作=]在数据库已经找到所有元素之后只完成第一个元素?

数组字段 "timestamps.history" 是嵌套字段,使用 $elemMatch 投影运算符获取第一个匹配元素失败并出现错误:"Cannot use $elemMatch projection on a nested field.".

在这种情况下,使用如下所示的 Positional Projection Operator $ 以获得所需的结果。

db.collection.find(
 {
   key: 1, "timestamps.history.time": { $lt: 10 }
 },
 {
   "timestamps.history.$": 1
 }
)