gpt4 book ai didi

mongodb - 查找数组中的最大元素

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

编号:MongoDB Document from array with field value max

Finding highest value from sub-arrays in documents 中的答案和 MongoDB find by max value in array of documents建议使用 sort + limit(1),但这真的很慢。当然有一种方法可以使用 $max 运算符。

假设在聚合匹配中得到这样的文档:

{
_id: "notImportant",
array: [
{
name: "Peter",
age: 17
},
{
name: "Carl",
age: 21
},
{
name: "Ben",
age: 15
}
]
}

并且您想找到 age 最高的(整个,而不仅仅是一个值)文档。如何使用 $max 运算符做到这一点?

我试过了

unwind {"$array"}
project {"_id": 0, "name": "$array.name", "age": "$array.age"}

所以我明白了

{
_id: null,
name: "Peter",
age: 17
}
{
_id: null,
name: "Carl",
age: 21
}
{
_id: null,
name: "Ben",
age: 15
}

然后我尝试匹配年龄:

age: {$eq: {$max: "$age"}}

,但这没有给我任何结果。

换句话说,我需要获取的是数组中最年长的人的姓名和所有其他字段。有成千上万的人,有很多属性,最重要的是它在树莓派上运行。我需要在几十个这样的数组上执行此操作。因此,排序总共需要大约 40 秒。所以我真的不想使用排序。

最佳答案

你能用 $reduce 试试这个聚合吗?

db.t63.aggregate([
{$addFields : {array : {$reduce : {
input : "$array",
initialValue : {age : 0},
in : {$cond: [{$gte : ["$$this.age", "$$value.age"]},"$$this", "$$value"]}}
}}}
])

输出

{ "_id" : "notImportant", "array" : { "name" : "Carl", "age" : 21 } }

关于mongodb - 查找数组中的最大元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54292286/

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