我是 MongoDB 新手,很长一段时间以来一直在努力使用 java api 进行多种排序。
所以我的数据采用以下形式:
{
"id":1,
"name":"sam",
"timestamp":"2015-10-24 19:50:53"
}
我正在尝试根据时间戳获取最近 10 条记录。一旦我有了它,我想根据名称和时间戳对结果进行排序。
这给了我最近 10 条记录的正确排序结果: .sort(new Document("timestamp", -1)).limit(10)
但是如果我添加更多排序参数,它会对整个结果集进行排序。
我正在尝试获取最近 10 条记录,一旦获得结果,我想按时间戳升序排序,然后在出现平局时按名称排序。
最佳答案
看来你想做的事情是不可能的。如 mongo docs 中所述sort 总是在 limit 之前执行。所以做类似的事情
.sort({timestamp: -1}).limit(10).sort({timestamp: 1, name: 1})
只会导致第一个排序被第二个排序覆盖。 这相当于
sort({timestamp: 1, name: 1}).limit(10)
所以我认为,最好的选择是从 Mongo 获取 10 条最新记录,然后在 Java 代码中按照您需要的顺序再次对它们进行排序(时间戳升序和名称升序)。
关于java - MongoDb 多重排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40207359/