Mongodb Mongo和find的地理数据始终限制在100个以内
在尝试mongo性能时,我发现我的mongo db的行为很奇怪 首先,我填写了以下查询:Mongodb Mongo和find的地理数据始终限制在100个以内,mongodb,find,Mongodb,Find,在尝试mongo性能时,我发现我的mongo db的行为很奇怪 首先,我填写了以下查询: for (i=0; i < 10000000; i++){db.location.insert( {_id: Math.floor((Math.random()*10000000000)+1), position: [Math.round(Math.random()*10000)/10000, Math.round(Math.random()*10000)/10000]} )} 然后执行查询: db
for (i=0; i < 10000000; i++){db.location.insert( {_id: Math.floor((Math.random()*10000000000)+1), position: [Math.round(Math.random()*10000)/10000, Math.round(Math.random()*10000)/10000]} )}
然后执行查询:
db.location.find( {position: { $near: [1,1], $maxDistance: 1/111.12 } } )
无论我尝试做什么,我总是得到大小或计数结果100
我在文档中注意到,解除限制为100。我还试图用大于100的值覆盖它。不幸的是我失败了
你曾经遇到过这样的情况吗?来自官方:
$near操作符需要一个地理空间索引:用于GeoJSON点的2dsphere索引;传统坐标对的二维索引。默认情况下,使用2d索引的查询最多返回100个文档但是您可以使用更改结果数
另外,请参阅本教程页和中的“注意事项”
更新:正如Sumeet在对其答案的评论中所写,这是一个悬而未决的问题。
为了确保您的查询返回正确的计数,您可以在limit方法中指定,如果您在shell中工作,您可以尝试使用光标
.limit().explain().n
。来获得所有文档查询
cordinate = [1,1];
maxDistance = 1/111.12 ;
db.location.find({"position" : {"$within" :
{"$center" : [cordinate , maxDistance ]}
}
});
在我的MongoDB上尝试了相同的场景,效果很好。我给出了145条限制,它给了我145条记录。然而,正如文档中提到的,如果我没有指定任何限制,它会给我100条记录
db.location.find( {position: { $near: [1,1], $maxDistance: 1 } } ).limit(145)
我试着使用上述语句。
请注意,我更改了$maxDistance的值,以便获得大量记录。这正是我之前发现的。我限制并重新检查了它。Find返回更多值,但count或size仍然显示100
count
have parameterapplySkipLimit
,您可以为应用跳过和限制影响()编写.count(true)
。但是我现在已经用$near
试过了,它不起作用。现在我正在研究发生了什么,你是对的。我没数/没量就计算出来了。但是count/size仍然显示100作为找到的文档的总和:db.location.find({position:{$near:[1,1],$maxDistance:1}}).limit(145.count(),如果我不想要任何限制怎么办?限制(0)不工作限制(0)等同于不指定限制本身。@Lormitto:是的,似乎count()显示了错误的结果。但是,如果您尝试在此查询上调用explain()函数,您可以看到当使用limit(145)时,它返回145个文档。您的解决方案似乎有效。非常感谢。你能告诉我这和以前的方法有什么不同吗?“内部”会带来重要的区别吗?
db.location.find( {position: { $near: [1,1], $maxDistance: 1 } } ).limit(145)