Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 为每个用户获取集合中的最新文档_Mongodb_Mongodb Query_Aggregation Framework - Fatal编程技术网

Mongodb 为每个用户获取集合中的最新文档

Mongodb 为每个用户获取集合中的最新文档,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我需要为集合中的每个用户获取集合中的最新文档。例如,假设我有如下数据: [ {用户:“bob”,时间:ISODate(“Sat,2012年3月24日05:52:21+0000”),值:“a”}, {用户:“bob”,时间:ISODate(“Sun,2012年3月25日05:52:21+0000”),值:“b”}, {用户:“joe”,时间:ISODate(“Sat,2012年3月24日05:52:21+0000”),值:“c”}, {用户:“bob”,时间:ISODate(“Mon,2012年3

我需要为集合中的每个用户获取集合中的最新文档。例如,假设我有如下数据:

[
{用户:“bob”,时间:ISODate(“Sat,2012年3月24日05:52:21+0000”),值:“a”},
{用户:“bob”,时间:ISODate(“Sun,2012年3月25日05:52:21+0000”),值:“b”},
{用户:“joe”,时间:ISODate(“Sat,2012年3月24日05:52:21+0000”),值:“c”},
{用户:“bob”,时间:ISODate(“Mon,2012年3月26日05:52:21+0000”),值:“d”},
{用户:“joe”,时间:ISODate(“Sun,2012年3月25日05:52:21+0000”),值:“e”}
]
查询后,我想返回以下条目:

[
{用户:“bob”,时间:ISODate(“Mon,2012年3月26日05:52:21+0000”),值:“d”},
{用户:“joe”,时间:ISODate(“Sun,2012年3月25日05:52:21+0000”),值:“e”}
]
我在这里看到了这个问题:,但这似乎不是我想要的正确答案。如何查询此数据?

您可以使用运算符和方法来执行此操作:

db.collection.aggregate([
{“$sort”:{“用户”:1,“时间”:1},
{“$组”:{
“_id”:“$user”,
“时间”:{“$last”:“$time”},
“值”:{“$last”:“$value”}
}}
])
因此,您从分组边界获取“last”项以返回值。在大多数情况下,
$last
的使用只有在排序之后才有意义,但是对于像这样增加插入,该阶段可能被排除在外


可能值得注意的是,您也可以使用
\u id
值来代替时间戳来启用
$sort
,因为它的值也会不断增加。

您的时间实际上是如何格式化的,还是只是为了格式化而去掉ISODate()部分?如果它们实际上是字符串,那么你就有问题了。不,它们实际上是ISODate()s,为了简单起见,我就是这样写的。