2013-07-31 108 views
0

我有以下蒙戈查詢(用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

this mailing list post中,Eliot提到$near不使用遊標,因此其結果限於4MB或100個文檔,以先到達者爲準。 current documentation也是這樣說的,但這僅適用於2d索引(文檔應該由DOCS-1841修復)。

如果您在GeoJSON儲存點和(2.4版本新)使用2dsphere indexes$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