文档中子数组的最高值

时间:2017-10-15 15:09:28

标签: arrays mongodb aggregation-framework

我有这个要求,我有一个如下集合:

{ 
      "_id" : 1, 
      "name" : "sam", 
      "Array" : [ 
          { "K" : "A", "V" : 8 }, 
          { "K" : "B", "V" : 5 }, 
          { "K" : "C", "V" : 13 } 
      ] 
},
{ 
    "_id" : 2, 
    "name" : "tom", 
    "Array" : [ 
        { "K" : "D", "V" : 12 }, 
        { "K" : "E", "V" : 14 }, 
        { "K" : "F", "V" : 2 } 
    ]
},
{ 
    "_id" : 3, 
    "name" : "jim", 
    "Array" : [ 
        { "K" : "G", "V" : 9 }, 
        { "K" : "H", "V" : 4 },
        { "K" : "I", "V" : 2 } 
    ] 
}

我想运行一个查询,返回每个_id的子文档,其中包含最高的" V",所以在这种情况下我会得到:

{ "_id" : 1, "name" : "sam", "Array" : [ { "K" : "C", "V" : 13 } ] }
{ "_id" : 2, "name" : "tom", "Array" : [ { "K" : "E", "V" : 14 } ] }
{ "_id" : 3, "name" : "jim", "Array" : [ { "K" : "G", "V" : 9 } ] }

1 个答案:

答案 0 :(得分:0)

您可以使用$filter$max运算符仅选择V字段值等于数组中最大值的子文档。

此处使用$addFields管道阶段来指定文档中的所有其他字段。

db.collection.aggregate([
   {
      "$addFields":{
         "Array":{
            "$filter":{
               "input":"$Array",
               "cond":{
                  "$eq":[
                     "$$this.V",
                     {
                        "$max":"$Array.V"
                     }
                  ]
               }
            }
         }
      }
   }
])