在尝试使用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.location.ensureIndex( {position: "2d"} )
然后我执行查询:
db.location.find( {position: { $near: [1,1], $maxDistance: 1/111.12 } } )
无论我尝试做什么,我总是得到大小或计数结果100。
我在文档中注意到defualt limit是100.我还尝试用大于100的值覆盖它。不幸的是我失败了。
你遇到过这种情况吗?
答案 0 :(得分:1)
来自官方documentation:
$ near运算符需要一个地理空间索引:GeoJSON点的2dsphere索引;传统坐标对的2d索引。默认情况下,使用2d索引的查询返回100个文档的限制; 但是您可以使用limit()来更改结果数量。
还要注意&#39;注意&#39;在本教程页面中。
<强>更新强>
正如Sumeet在评论中所写的那样 - 这是一个悬而未决的问题
可以肯定的是,如果您在shell中工作,那么您的查询返回正确的计数,您可以尝试在光标中使用.limit(<some_number>).explain().n
。
答案 1 :(得分:1)
获取所有文档查询,如
cordinate = [1,1];
maxDistance = 1/111.12 ;
db.location.find({"position" : {"$within" :
{"$center" : [cordinate , maxDistance ]}
}
});
答案 2 :(得分:0)
刚刚在我的MongoDB上尝试了相同的场景,它运行正常。我给了145的限制,它给了我145条记录。但是,正如文档中所提到的,如果我没有指定任何限制,它会给我100条记录。
db.location.find( {position: { $near: [1,1], $maxDistance: 1 } } ).limit(145)
我尝试使用上述声明。 请注意,我更改了$ maxDistance的值,以便获得大量记录。