4

我很少有这样的记录

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

谢谢

4

1 回答 1

5

您必须使用 $first 运算符,检查这个问题和我的答案以获得解释:获取具有不同标准的最后文档

正确的代码将是:

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"}}} 
      ])
于 2013-10-04T12:55:44.203 回答