【发布时间】:2016-03-11 11:33:48
【问题描述】:
我想获取每个站点的最后一个文档以及所有其他字段:
{
"_id" : ObjectId("535f5d074f075c37fff4cc74"),
"station" : "OR",
"t" : 86,
"dt" : ISODate("2014-04-29T08:02:57.165Z")
}
{
"_id" : ObjectId("535f5d114f075c37fff4cc75"),
"station" : "OR",
"t" : 82,
"dt" : ISODate("2014-04-29T08:02:57.165Z")
}
{
"_id" : ObjectId("535f5d364f075c37fff4cc76"),
"station" : "WA",
"t" : 79,
"dt" : ISODate("2014-04-29T08:02:57.165Z")
}
我需要 t 和 station 来获取每个站点的最新 dt。 使用聚合框架:
db.temperature.aggregate([{$sort:{"dt":1}},{$group:{"_id":"$station", result:{$last:"$dt"}, t:{$last:"$t"}}}])
返回
{
"result" : [
{
"_id" : "WA",
"result" : ISODate("2014-04-29T08:02:57.165Z"),
"t" : 79
},
{
"_id" : "OR",
"result" : ISODate("2014-04-29T08:02:57.165Z"),
"t" : 82
}
],
"ok" : 1
}
这是最有效的方法吗?
谢谢
【问题讨论】:
-
您从 NeilLunn 接受的答案实际上是不正确的。自然顺序不保证是插入顺序(封顶集合除外),并且 _id 仅在您的 所有 客户端计算机时间同步时才保证单调递增。
标签: mongodb aggregation-framework