我正在使用MongoDB中的地理空间“近距离”搜索(使用C#驱动程序)返回给定纬度/长度25英里范围内的住宅。这将返回通过接近纬度/长度排序的房屋并且效果很好。
但是,我想添加排序(在其他字段,如房价)和分页,这里是我卡住的地方。要正常工作,需要弄清楚哪些房屋在纬度/长度的25英里范围内,然后对这些结果进行排序(假设基于价格),然后取10个结果的“页面”。
以下是我到目前为止所遇到的问题是它需要一页结果(基于邻近排序),然后按照我在“SetSortOrder”中设置的那样对10页结果页面进行排序,而不是排序整个结果在lat / long附近,因此每页10个结果都会自行排序。
var coordinates = find.GetCoordinates();
var near = Query.Near("Coordinates", coordinates.Latitude,
coordinates.Longitude,
find.GetRadiansAway(), false);
var query = Collection().Find(near);
query.Skip = find.GetSkip();
query.Limit = find.GetLimit();
query.SetSortOrder(new string[] { "Price" });
var results = query.ToArray();
答案 0 :(得分:0)
这是正确的行为,因为$near默认返回按距离排序的结果。并在$ near运算符内部进行排序,因此您无法更改它。
db.places.find({loc:{$ near: [50,50]}})
以上查询找到最接近的查询 指向(50,50)并返回它们 按距离排序(没有必要 另外一个排序参数)
因此,在您的示例Price
中,它是第二个排序字段,用于按结果排序的结果中的数据排序。
Workgraund加载Query.Near
的整个结果,然后根据客户端上的任何字段对其进行排序。