通过近端查询,排序,然后分页

时间:2011-03-27 16:14:36

标签: c# mongodb mongodb-.net-driver

我正在使用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();

1 个答案:

答案 0 :(得分:0)

这是正确的行为,因为$near默认返回按距离排序的结果。并在$ near运算符内部进行排序,因此您无法更改它。

  

db.places.find({loc:{$ near:   [50,50]}})

     

以上查询找到最接近的查询   指向(50,50)并返回它们   按距离排序(没有必要   另外一个排序参数)

因此,在您的示例Price中,它是第二个排序字段,用于按结果排序的结果中的数据排序。

Workgraund加载Query.Near的整个结果,然后根据客户端上的任何字段对其进行排序。