2011-03-27 66 views
2

我在MongoDB中使用地理空间“近”搜索(使用C#驱动程序)在给定经纬度的25英里范围内返回房屋。这将返回按照lat/long排序靠近的房屋,并且效果很好。靠近,排序,然后寻呼查询

但是,我想添加排序(在其他领域,如家庭价格)和分页,这里是我卡住的地方。要正确工作,需要找出哪些房屋位于经纬度25英里以内,然后对这些结果进行分类(比如说基于价格),然后获得10个结果的“页面”。

以下是我到目前为止,它的问题是它需要一页结果(基于接近度排序),然后通过我在“SetSortOrder”中设置的结果排序该页面的10个结果,而不是排序整个结果靠近纬度/长度,因此每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

这是正确的行为,因为通过$near按距离排序默认返回结果。并且在$ near操作符内部进行排序,所以你不能改变它。

db.places.find({LOC:{$邻近: [50,50]}})

上述查询查找最接近 点(50,50),并返回它们 按距离排序(没有额外的排序参数需要 )

所以在您例如Price它的第二个排序字段按距离排序结果中这种类型的数据。

Workgraund加载Query.Near的整个结果,并按照客户端上的任何字段进行排序。