java - MongoDb 多重排序

标签 java mongodb

我是 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/

相关文章:

javascript - 如何在 Mongoose MongoDb NodeJS 中获取数组中集合中的连接对象

node.js - 如何在 Node JS 中执行/中止长时间运行的任务?

mongodb - 无法从docker连接到mongodb实例: Connection refused

java - 光滑 : can't load image in update loop

java - 返回最大尺寸的列表<integer>对象

java - 使用apache cxf动态创建Web服务客户端(修复no operationfound unchecked异常),调用带有身份验证的操作

java - 通过 MAT 了解内存泄漏

mongodb - 在grails中迁移mongodb插件时发生异常

node.js - 根据子文档日期查找即将发布的文档

compiler-errors - JRE 抛出的 fatal error