MongoDb多种排序

时间:2016-10-23 20:13:51

标签: java mongodb

我是MongoDB的新手,并且在很长一段时间内一直在努力使用java apis获取多种排序。

所以我的数据是:

{  
   "id":1,
   "name":"sam",
   "timestamp":"2015-10-24 19:50:53"
}

我正在尝试根据时间戳获取最新的10条记录。一旦我有了,我想根据名称和时间戳对结果进行排序。

这给了我最近10条记录的正确排序:  .sort(新文档(“timestamp”, - 1))。limit(10)

但是如果我添加更多排序参数,它会对整个结果集进行排序。

我正在尝试获取最近的10条记录,一旦我得到结果,我想按时间戳按升序排序,然后按名称排序。如果是平局。

1 个答案:

答案 0 :(得分:0)

看来,你要做的事情是不可能的。如mongo docs中所述,sort总是在limit之前执行。所以做一些像

这样的事情
.sort({timestamp: -1}).limit(10).sort({timestamp: 1, name: 1})

只会导致第二种排序覆盖第一种排序。 这相当于

sort({timestamp: 1, name: 1}).limit(10)

所以我认为,你最好的选择是从Mongo获取10条最新记录,然后在Java代码中再次对它们进行排序,以便你需要(时间戳升序和名称升序)。