如何从一系列文档中获取特定文档,其中该文档中的值在该数组中所有文档中最高?
例如:
{
_id: "notImportant",
array: [
{
name: "Peter",
age: 17
},
{
name: "Carl",
age: 21
},
{
name: "Ben",
age: 15
}
]
}
在这种情况下,如何获取数组中所有文档中年龄最长的文档
{
name: "Carl",
age: 21
}
我尝试在$ unwind之后的投影中使用$ max,但这只给了我年龄:21位,而不是文档中的其他内容(在示例中:name)。 我也尝试在展开+投影之后进行匹配:
{
"age": {"$eq": {"$max": "$age"}}
}
但这给了我一个空洞的回报。当我使用$ lt或$ gt时,它也是空的。
编辑:
我已经看到建议使用排序然后将其限制为1的答案,但实际上这似乎效率很低。我的数组有数千个数据点,要从其中获取一个文档,且指定字段为所有值的最大值,则需要遍历该列表一次,但是对其进行排序则需要n * log(n)个操作才能获取最顶端的数据列表中。当然,有一种方法可以更有效地做到这一点。