我有以下文档结构,并且只有在相应的'mymap.k'='test_1'
是文档中最高的时候才能获得mymap.v
但所有的文档。
{ "name":"testDoc1", "mymap": [{"k":"test_1","v":5},{"k":"test_2","v":3}] }
{ "name":"testDoc2", "mymap": [{"k":"test_1","v":2},{"k":"test_2","v":4}] }
{ "name":"testDoc3", "mymap": [{"k":"test_3","v":6},{"k":"test_2","v":4},{"k":"test_3","v":6}] }
{ "name":"testDoc4", "mymap": [{"k":"test_3","v":2},{"k":"test_1","v":7},{"k":"test_2","v":4}] }
所以结果应该是:
{ "name":"testDoc1" }
{ "name":"testDoc4" }
我可以通过聚合框架实现这一目标吗?
我的方法是做类似以下的事情。但这根本不起作用。
db.col.aggregate([
{$match:{"mymap.k":"test_1"}},
{$unwind:"$mymap"},
{$group: {_id:"$_id", mymap: { k:{$first:"$mymap.k"}, v:{$max:"$mymap.v"}}}}
])