MongoDB $接近最大距离返回最大结果

时间:2013-07-31 22:09:07

标签: mongodb geospatial

我有以下mongo查询(用PHP编写)

 $q = array("created_at" => array("\$gte" => $mdate), "icv" => 1, "loc" => array("\$near" => array($latitude, $longitude), "\$maxDistance" => 5));

基本上是:

db.collection.find({loc: {$near: [XX,YY]}, $maxDistance: 5}, "vid": 1, "created_at":{$gte: "SOMEDATE"}});

我想查找与此查询匹配的所有文档,而不仅仅是默认返回的100。如果我在此查询中设置limit,则它会离开距离距离。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

this mailing list post中,艾略特提到$near不使用光标,因此其结果仅限于4MB或100个文档,以先到者为准。 current documentation表示相同,但​​仅适用于2d索引(文档应由DOCS-1841修复)。

如果您在GeoJSON中存储点并使用2dsphere indexes(版本2.4中的新增内容),则$near查询会使用游标,并且不应具有100个文档的硬上限。 / p>

考虑以下示例,首先使用2d索引:

> var point = [0,0];
> for(i=0;i<200;i++) db.foo.insert({x: point});
> db.foo.ensureIndex({x: "2d"});
> db.foo.find({x: {$near: point}}).count(true);
100
> db.foo.find({x: {$near: point}}).limit(200).count(true);
100

然后使用具有等效点数据的2dsphere索引:

> var point = {type: "Point", coordinates: [0,0]};
> for(i=0;i<200;i++) db.bar.insert({x: point});
> db.bar.ensureIndex({x: "2dsphere"})
> db.bar.find({x: {$near: point}}).count(true)
200
> db.bar.find({x: {$near: point}}).limit(150).count(true)
150