0

我有以下 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在此查询上设置,它会超出距离。

有什么建议么?

4

1 回答 1

1

此邮件列表帖子中,艾略特提到$near不使用游标,因此其结果限制为 4MB 或 100 个文档,以先到达者为准。当前文档也是如此,但这仅适用于 2d 索引(文档应由DOCS-1841修复)。

如果您在GeoJSON中存储点并使用2dsphere 索引(2.4 版中的新功能),$near查询确实使用游标,并且不应有 100 个文档的硬性上限。

考虑以下示例,首先使用 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
于 2013-08-20T18:27:09.220 回答