给定如下的文档结构:
{
values: [
{ value: 10 },
{ value: 20 },
{ value: 30 }
]
}
我想搜索数组中最大值与查询匹配的所有文档。
例如。如果我搜索最大值小于 25 的所有文档,则上面的示例将不会匹配,因为 30 > 25。我该怎么做?
最佳答案
使用.aggregate()
提供对聚合管道的访问的方法。
如果您使用的是 3.2 或更高版本,管道中的唯一阶段是 $redact
您在哪里使用 $$KEEP
和 $$PRUNE
用于返回或丢弃不符合您的条件的文档的变量。在 $cond
您使用 $max
的表达式运算符返回“values”数组中的最大值 $map
返回运算符,因为文档中提到的 $redact
阶段:
db.collection.aggregate([
{ "$redact": {
"$cond": [
{ "$lt": [
{ "$max": {
"$map": {
"input": "$values",
"as": "value",
"in": "$$value.value"
}
}},
25
]},
"$$KEEP",
"$$PRUNE"
]
}}
])
从版本 3.0 开始,您需要首先使用 $unwind
对“值”数组进行非规范化。然后运算符 $group
您的文档由 _id
提供;使用 $max
计算最大值并使用 $push
累加器运算符返回值数组。最后一个阶段是 $redact
阶段。
db.collection.aggregate([
{ "$unwind": "$values" },
{ "$group": {
"_id": "$_id",
"maxvalues": { "$max": "$values.value"},
"values": { "$push": "$values" }
}},
{ "$redact": {
"$cond": [
{ "$lt": [ "$maxvalues", 25 ] },
"$$KEEP",
"$$PRUNE"
]
}}
])
关于mongodb - 查找数组中最大值与查询匹配的所有 Mongo 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34659676/