从DB获取结果之前的自定义排序

时间:2014-01-04 18:08:45

标签: java mongodb

我正在使用Java驱动程序在MongoDB上查找某些条目。 我要做的是从我的数据库中获取介于某个纬度,经度之间的所有条目,但只获取最接近的20个结果。 所以我假设我有参数lat = Latitude,lng = Longitude。

我想这样做:

BasicDBObject query = new BasicDBObject();
query.put("latitude", new BasicDBObject("$gte", Double.parseDouble(lat) - 0.1).append("$lte", Double.parseDouble(lat) + 0.1));
query.put("longitude", new BasicDBObject("$gte", Double.parseDouble(lng) - 0.1).append("$lte", Double.parseDouble(lng) + 0.1));
db.find(query).limit(20).sort(???)...

正常排序的问题是它只按特定字段的升序/降序排列,并且它不提供更复杂的排序,例如:(lat + lng)。

此外,我需要在获取之前完成排序,因为我希望所有数据库中最接近的20个结果,而不是获取适合查询的20个结果,然后只有在获取它们之后,才将它们排序

有没有人知道如何做到这一点?

1 个答案:

答案 0 :(得分:2)

$geoNearhttp://docs.mongodb.org/manual/reference/command/geoNear/)实际上应该在返回之前先按最接近排序。

更常用的参考链接是:http://docs.mongodb.org/manual/reference/command/nav-geospatial/