kbj*_*bjr 0 mongodb mongodb-query aggregation-framework
我需要为集合中的每个用户获取集合中的最新文档。例如,假设我有这样的数据:
[
{ user: "bob", time: ISODate("Sat, 24 Mar 2012 05:52:21 +0000"), value: "a" },
{ user: "bob", time: ISODate("Sun, 25 Mar 2012 05:52:21 +0000"), value: "b" },
{ user: "joe", time: ISODate("Sat, 24 Mar 2012 05:52:21 +0000"), value: "c" },
{ user: "bob", time: ISODate("Mon, 26 Mar 2012 05:52:21 +0000"), value: "d" },
{ user: "joe", time: ISODate("Sun, 25 Mar 2012 05:52:21 +0000"), value: "e" }
]
Run Code Online (Sandbox Code Playgroud)
查询后,我想找回这些条目:
[
{ user: "bob", time: ISODate("Mon, 26 Mar 2012 05:52:21 +0000"), value: "d" },
{ user: "joe", time: ISODate("Sun, 25 Mar 2012 05:52:21 +0000"), value: "e" }
]
Run Code Online (Sandbox Code Playgroud)
我在这里看到了这个问题:MongoDB Map-Reduce从每个用户的上一条记录中查找值,但这似乎并不是我要找的正确答案。如何查询该数据?
您可以将$last运算符与.aggregate()方法配合使用来执行此操作:
db.collection.aggregate([
{ "$sort": { "user": 1, "time": 1 } },
{ "$group": {
"_id": "$user",
"time": { "$last": "$time" },
"value": { "$last": "$value" }
}}
])
Run Code Online (Sandbox Code Playgroud)
因此,您将从分组边界中获取“最后一个”项目以返回值。采用$last一种在大多数情况下,但是对于越来越像这样的阶段,大概可以排除插入后真的才有意义。
可能值得注意的是,您也可以使用该_id值代替时间戳,$sort因为它的值也总是会增加。
| 归档时间: |
|
| 查看次数: |
694 次 |
| 最近记录: |