我有以下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
,则它会离开距离距离。
有什么建议吗?
答案 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