Java MongoDb多重排序

Java MongoDb多重排序,java,mongodb,Java,Mongodb,我是MongoDB的新手,很长一段时间以来一直在努力使用JavaAPI获取多种排序 因此,我的数据形式如下: { "id":1, "name":"sam", "timestamp":"2015-10-24 19:50:53" } 我试图根据时间戳获取最近的10条记录。一旦我有了它,我想根据名称和时间戳对结果进行排序 这为我提供了最近10条记录的正确排序输出: .sortnew Documenttimestamp,-1.10 但是如果我添加更多的排序参数,它会对整个结果集进

我是MongoDB的新手,很长一段时间以来一直在努力使用JavaAPI获取多种排序

因此,我的数据形式如下:

{  
   "id":1,
   "name":"sam",
   "timestamp":"2015-10-24 19:50:53"
}
我试图根据时间戳获取最近的10条记录。一旦我有了它,我想根据名称和时间戳对结果进行排序

这为我提供了最近10条记录的正确排序输出: .sortnew Documenttimestamp,-1.10

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


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

看来,您试图做的事情是不可能的。如中所述,排序始终在限制之前执行。所以做一些类似于

.sort({timestamp: -1}).limit(10).sort({timestamp: 1, name: 1})
只会导致第一个排序被第二个排序覆盖。 这相当于

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

所以我认为,最好的办法是从Mongo中获取10条最新记录,然后用Java代码再次对它们进行排序,以便按时间戳升序和名称升序进行排序。

看来,您试图做的事情是不可能的。如中所述,排序始终在限制之前执行。所以做一些类似于

.sort({timestamp: -1}).limit(10).sort({timestamp: 1, name: 1})
只会导致第一个排序被第二个排序覆盖。 这相当于

sort({timestamp: 1, name: 1}).limit(10)
所以我认为,最好的办法是从Mongo中获取10条最新记录,然后用Java代码再次对它们进行排序,顺序是时间戳升序和名称升序