MongoDB中地理空间查询中$GeoInner的排序

MongoDB中地理空间查询中$GeoInner的排序,mongodb,sorting,geospatial,Mongodb,Sorting,Geospatial,我试图检索数据库中存储的一组多边形,并按半径对它们进行排序。因此,我用一个简单的$geoinsin编写了一个查询 因此,如果不进行排序,代码如下所示: db.areas.find( { “几何学”:{ “$GEOIN”:{ “$geometry”:{ “类型”:“多边形”, “坐标”:[[/**OMISIS:点阵列**/]] } } } }).极限(10).解释(); 解释结果如下: { “游标”:“S2Cursor”, “isMultiKey”:没错, “n”:10, “非扫描对象”:10,

我试图检索数据库中存储的一组多边形,并按半径对它们进行排序。因此,我用一个简单的
$geoinsin
编写了一个查询

因此,如果不进行排序,代码如下所示:

db.areas.find(
{
“几何学”:{
“$GEOIN”:{
“$geometry”:{
“类型”:“多边形”,
“坐标”:[[/**OMISIS:点阵列**/]]
}
}
}
}).极限(10).解释();
解释结果如下:

{
“游标”:“S2Cursor”,
“isMultiKey”:没错,
“n”:10,
“非扫描对象”:10,
“非扫描”:367,
“nscannedObjectsAllPlans”:10,
“NSCanendallPlans”:367,
“扫描者”:错误,
“indexOnly”:错误,
“NYELDS”:0,
“跳过”:0,
“米利斯”:2,
“指数边界”:{
},
“非扫描”:367,
“匹配测试”:数字长(10),
“土工布”:长(10)号,
“cellsInCover”:长(27)号,
“服务器”:“*OMISIS*”
}
(即使它很快,也会显示为cursor
S2Cursor
,让我知道我的复合索引没有被使用。但是,它很快)

因此,每当我尝试添加
sort
命令时,只要使用
.sort({radius:-1})
,查询就会变得非常慢:

{
“游标”:“S2Cursor”,
“isMultiKey”:没错,
“n”:10,
“nscannedObjects”:58429,
“非扫描”:705337,
“nscannedObjectsAllPlans”:58429,
“NSCanendallPlans”:705337,
“扫描者”:对,
“indexOnly”:错误,
“NYELDS”:3,
“跳过”:0,
“米利斯”:3186,
“指数边界”:{
},
“非扫描”:705337,
“匹配测试”:数字长(58432),
“土工布”:编号为58432,
“cellsInCover”:长(27)号,
“服务器”:“*OMISIS*”
}
使用MongoDB扫描所有文档。显然,我试图添加一个复合索引,如
{radius:-1,geometry:'2dsphere'}
{geometry:'2dsphere',radius:-1}
,但没有任何帮助。还是很慢

如果我使用复合索引的方式不对,如果
S2Cursor
告诉我应该改变索引策略,那么我就会知道我做错了什么

(注:我使用的是MongoDB 2.4.5+,所以这个问题并不是因为在使用本文报告的2dsphere索引时,第二个字段在复合索引中升序引起的)


首先,s2Cursor表示查询使用地理索引。
排序操作很慢的原因有很多,排序操作需要内存,也许您的服务器内存很少,应该考虑在代码中执行排序操作,而不是在服务器端执行排序操作。

我有类似的行为,您是否已经更好地理解了正在发生的事情?问题是,为什么不使用复合索引