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
}
)
我在 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
}
)