我有一个查询,用于$near
将记录向下过滤到附近。然后应该将结果按一个单独的字段排序。但是,我遇到了一种记录丢失的情况,即使它们符合条件。
我怀疑这是由于$near
与2d
索引一起使用具有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);
}
);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句