从文档中的子数组中查找最高值

Fla*_*ien 9 mongodb aggregation-framework

假设我有以下集合:

{ _id: 1, Array: [
  { K: "A", V: 8 },
  { K: "B", V: 5 },
  { K: "C", V: 13 } ] }

{ _id: 2, Array: [
  { K: "D", V: 12 },
  { K: "E", V: 14 },
  { K: "F", V: 2 } ] }
Run Code Online (Sandbox Code Playgroud)

我想运行一个返回具有最高"V"的子文档的查询,所以在这种情况下我会得到:

{ _id: 1, Array: [ { K: "E", V: 14 } ] }
Run Code Online (Sandbox Code Playgroud)

或者干脆:

{ K: "E", V: 14 }
Run Code Online (Sandbox Code Playgroud)

重要的是我希望Mongo服务器上的内存使用量为O(1)(无论我处理多少文档,内存使用量是不变的),我只想检索那个我需要的值的子文档(我不想下载超过必要的更多子文档).

我首选的方法是使用简单的查找查询,但我不确定这是否可行.我怀疑这也可以通过聚合框架(或map reduce?)来完成,但是看不出来.我不希望结果存储在临时集合中,而是直接返回给我的客户端(就像普通查询一样).

小智 7

以下聚合集返回您需要的内容.

db.letters.aggregate([
    {$project:{"Array.K":1, "Array.V":1}},
    {$unwind:"$Array"},
    {$sort:{"Array.V":-1}},
    {$limit:1}
]);
Run Code Online (Sandbox Code Playgroud)

返回:

{"_id":2, "Array":{"K":"E","V":14}}
Run Code Online (Sandbox Code Playgroud)

请享用!:)