我如何在 MongoDB 中查詢陣列中至少一個值在一個范圍內的所有檔案,例如 8 到 10。
如果我將其作為列舉進行查詢,則可以按要求作業: {x : {$in: [8, 9, 10]}}. x這將回傳集合 [8,9,10]中任何值的所有記錄。在下面的示例中,它回傳第一條記錄,但不回傳第二條記錄。
但在我的應用程式中,我無法列舉該集合,因為范圍可能非常大,不一定是整數。
我的第一個猜測是{ x: {$gte: 8, $lte: 10}} ,但這失敗了,因為檔案可能至少有一個值高于下限,并且至少有一個值低于上限,因此即使沒有值高于下限和低于上限也會通過。在下面的示例中,回傳兩條記錄,即使記錄 2 在 8-10 中沒有值:
[
{
"key": 1,
"x": [ 5,9,10 ]
},
{
"key": 2,
"x": [ 2, 3, 7, 999 ]
}
]
MongoPlayground 示例:https ://mongoplayground.net/p/2ZLfTcGnW4g
如何在mongodb中查找范圍之間的值
uj5u.com熱心網友回復:
最適合這項任務的似乎是$elemMatch運算子:
db.collection.find({
a: {
$elemMatch: {
$gte: 12,
$lte: 17
}
}
})
解釋:它將匹配“a”陣列元素中至少一個值同時匹配范圍條件的所有檔案。
操場
uj5u.com熱心網友回復:
您可以使用聚合管道 $filter 僅匹配專案作為匹配檔案的條件:
db.collection.aggregate([
{
$addFields: {
valid: {
$size: {
$filter: {
input: "$x",
as: "item",
cond: {$and: [{$gte: ["$$item", rangeMin]}, {$lte: ["$$item", rangeMax]}]}
}
}
}
}
},
{
$match: {valid: {$gt: 0}}
},
{
$unset: "valid"
}
])
操場
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/478940.html
