具有最大日期的mongodb聚合框架查询

时间:2013-10-04 12:23:12

标签: mongodb aggregation-framework

我的记录很少

userid purchased  brand
1      2012-1-21  honda
1      2013-1-1   toyota
1      2013-2-30  mercedez

2      2013-1-1   honda
2      2012-1-1   toyota
2      2013-12-13 mercedez

我希望获得最大购买日期的用户记录。喜欢以下

1      2013-2-30  mercedez
2      2013-12-13 mercedez

我正在尝试使用mongodb聚合框架工作,但是遇到了正确查询的问题。

db.carsrecord.aggregate([{"$match" :{"userid":{"$in":[1,2,3,11]}}} ,
    {"$group":{"_id": {"uid":"$userid"},timecreated:{"$max":"$purchased" }}} ])

它返回我正确的隐藏和时间,但没有返回汽车品牌。

"result" : [
    {
        "_id" : {
            "uid" : 1
        },
        "timecreated" : ISODate("2013-10-03T20:01:45.366Z")
    }
],
"ok" : 1

由于

1 个答案:

答案 0 :(得分:3)

您必须使用$ first运算符,请检查此问题和我的答案以获得解释:Get last documents with a distinct criteria

正确的代码将是:

db.carsrecord.aggregate(
      [{"$match" :{"userid":{"$in":[1,2,3,11]}}} , 
       {"$sort": {userid:1, purchased:-1}},
       {"$group":{"_id": 
                     {     "uid":"$userid"  },
                  "timecreated":{"$first":"$purchased" },
                  "brand":{"$first":"$brand"}}} 
      ])