来自数组的MongoDB文档,其字段值为max

时间:2019-01-21 09:28:43

标签: arrays mongodb

如何从一系列文档中获取特定文档,其中该文档中的值在该数组中所有文档中最高?

例如:

{
  _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)个操作才能获取最顶端的数据列表中。当然,有一种方法可以更有效地做到这一点。

0 个答案:

没有答案