在 MongoDB 中,当有超过 100 条记录时,如何对 2d 索引 $near 查询进行排序?

In MongoDB, how can I sort a 2d indexed $near query when there are over 100 records?

我有一个查询使用 $near 将记录过滤到接近程度。然后应该按单独的字段对结果进行排序。然而,我 运行 遇到记录丢失的情况,即使它们符合条件。

我怀疑这是因为使用 $near2d 索引有 100 条记录的限制。我认为正在发生的事情是地理空间排序首先发生,然后我才应用于该结果的前 100 条记录。

有没有办法克服这种行为?我可以忽略 $near 的排序并使用我自己的排序作为主要排序,或者绕过 100 条记录的限制以便我的排序适用于整个集合吗?

这是我正在使用的查询中的 explain()

db.properties.find({
  loc: { 
    $near: [-80.173366, 34.07868], 
    $maxDistance: 5 
 }}).sort({mls: -1}).explain()

{
    "cursor" : "GeoSearchCursor",
    "isMultiKey" : false,
    "n" : 100,
    "nscannedObjects" : 211,
    "nscanned" : 700,
    "nscannedObjectsAllPlans" : 211,
    "nscannedAllPlans" : 700,
    "scanAndOrder" : true,
    "indexOnly" : false,
    "nYields" : 1,
    "nChunkSkips" : 0,
    "millis" : 2,
    "indexBounds" : {

    },
    "server" : "slate:27017",
    "filterSet" : false
}

我运行前阵子遇到同样的问题,可以用聚合-$match。我在 hackaton 中使用了以下代码段。

db.kickstarter.aggregate(   
                            {'$match' : 
                                {geo2 :
                                    {$geoWithin :
                                        { $centerSphere :[[parseFloat(lng), parseFloat(lat) ], radius/6371 ] 
                                        }
                                    }
                                }
                            },
                            {$sort : {'pledged' : -1}},
                            {$limit : 1000}, //you can set your limit here
                            function(err, data){
                                if(err)console.log(err);
                            }
                        );