gpt4 book ai didi

mongodb - 查找数组中的最大值与查询匹配的所有 Mongo 文档

转载 作者:可可西里 更新时间:2023-11-01 09:58:56 25 4
gpt4 key购买 nike

给定这样的文档结构:

{
values: [
{ value: 10 },
{ value: 20 },
{ value: 30 }
]
}

我想搜索数组中的最大值 值与查询匹配的所有文档。

例如。如果我搜索最大值小于 25 的所有文档,那么上面的示例将不匹配,因为 30 > 25。

我该怎么做?

最佳答案

使用 .aggregate()提供对聚合管道的访问的方法。

如果您使用的是 3.2 或更新版本,管道中的唯一阶段是 $redact你在哪里使用 $$KEEP$$PRUNE变量以返回或丢弃不符合您的条件的文档。在$cond您使用的表达式 $max运算符返回由 $map 返回的“值”数组中的最大值运算符,因为文档中提到的 $redact 阶段:

Incorporates the functionality of $project and $match

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累加器运算符返回 values 数组。最后一个阶段是 $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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com