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)
请享用!:)
| 归档时间: |
|
| 查看次数: |
6983 次 |
| 最近记录: |