2

我正在使用 MongoDB 中的地理空间“近”搜索(使用 C# 驱动程序)返回给定纬度/经度 25 英里内的家。这将返回按纬度/经度的接近程度排序的房屋,效果很好。

但是,我想添加排序(在其他领域,如房价)和分页,这就是我卡住的地方。为了正常工作,它需要确定哪些房屋在纬度/经度的 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();
4

1 回答 1

0

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

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

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

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

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

于 2011-03-27T16:39:41.947 回答