mongodb聚合框架查询最大日期

Mar*_*ugh 4 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
Run Code Online (Sandbox Code Playgroud)

我想获取具有最大购买日期的用户记录。喜欢关注

1      2013-2-30  mercedez
2      2013-12-13 mercedez
Run Code Online (Sandbox Code Playgroud)

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

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

它会随着时间的推移返回正确的隐藏信息,但不会返回汽车品牌。

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

谢谢

att*_*ish 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"}}} 
      ])
Run Code Online (Sandbox Code Playgroud)