Mongo并发现地理数据总是限制在100

时间:2014-03-05 19:23:32

标签: 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.location.ensureIndex( {position: "2d"} )

然后我执行查询:

db.location.find( {position: { $near: [1,1], $maxDistance: 1/111.12  } } )

无论我尝试做什么,我总是得到大小或计数结果100。

我在文档中注意到defualt limit是100.我还尝试用大于100的值覆盖它。不幸的是我失败了。

你遇到过这种情况吗?

3 个答案:

答案 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的值,以便获得大量记录。