在mongodb中返回具有聚合请求的数组的最大值

时间:2013-07-22 10:23:59

标签: arrays mongodb sorting max

你好,我有这个json

db.people.insert({
    "ad" : "noc2",
    "createdDate" : ISODate(),
    "list" : [
            {
                    "id" : "p45",
                    "date" : ISODate("2014-01-01T12:18:30.568Z"),
                    "value3" : 21,
                    "value1" : 77,
                    "value2" : 489
            },
            {
                    "id" : "p6",
                    "date" : ISODate("2013-07-18T12:18:30.568Z"),
                    "value3" : 20,
                    "value1" : 20,
                    "value2" : 7
            },
            {
                   "id" : "4578",
                    "date" : ISODate("2013-07-18T12:18:30.568Z"),
                    "value3" : 21,
                    "value1" : 300,
                    "value2" : -319
            }
   ]

})

我希望得到我的数组的最大值。例如,我想要一个json 这个:

“结果”:[     {         “_id”:“p45”,         “价值”:587     }  ]

我的聚合请求不起作用的是:  db.test1.aggregate({$match: "ad":"noc2"},{$unwind: '$list'},{$group: {_id: '$ad', list: {recommand: {$max: '$list'}}}});

2 个答案:

答案 0 :(得分:1)

试试这个:

db.people.aggregate([
  {$match:{ad:"noc2"}},
  {$unwind:"$list"},
  {$project:{_id:0, _id":"$list.id", "value":{$add:["$list.value1","$list.value2","$list.value3"]}}},
  {$sort:{value:-1},
  {$limit:1}
])

输出:

{ "result" : [ { "_id" : "p45", "value" : 587 } ], "ok" : 1 }

答案 1 :(得分:1)

答案包含查询语法中的几个问题,但大部分都有效。您可以在下面找到固定查询:

db.people.aggregate(
  {$match:{ad:"noc2"}},
  {$unwind:"$list"},
  {$project:{_id:0, _id:"$list.id", "value":{$add:["$list.value1","$list.value2","$list.value3"]}}},
  {$sort:{value:-1}},
  {$limit:1}
);