Php Yii emongo忽略maxDistance查询附近的文档
我正在尝试使用$near查找用户附近的位置Php Yii emongo忽略maxDistance查询附近的文档,php,mongodb,geolocation,yii,Php,Mongodb,Geolocation,Yii,我正在尝试使用$near查找用户附近的位置 $places = Places::model ()->findAll(array ( "conditions" => array ( 'location' => Array('near' => array((float)$this->latitudeUser,(float)$this->longitudeUser)), ),
$places = Places::model ()->findAll(array (
"conditions" => array (
'location' => Array('near' => array((float)$this->latitudeUser,(float)$this->longitudeUser)),
),
"maxDistance" => 1,
"limit" => 5,
));
一切似乎都正常,除了它能找到美国德克萨斯州的地方,而我在加拿大蒙特利尔。我不知道我能做些什么使maxDistance工作。似乎我不能使用GeoNear或nearSphere,因为EMongoDocuments似乎不支持它们
那么我是不是遗漏了一些明显的东西
我知道,但没有任何帮助
编辑:更改了经度的顺序,MongoDB希望坐标的格式为:纬度,经度。你的阵列的方向不对。除非使用nearSphere,否则距离应以度为单位。nearSphere的结果应该类似于near,因此EmongDocuments应该支持。如果使用nearSphere,则最大距离以弧度为单位,因此,如果使用nearSphere,则将距离(以km为单位)除以地球半径(以km为单位,~6371)。引用Mongonabs的神奇人物: 我相信你需要把maxDistance放在$near条件内。大概是这样的:
$places = Places::model ()->findAll(array (
"conditions" => array (
'location' => Array('near' => array((float)$this->latitudeUser,(float)$this->longitudeUser), 'maxDistance' => 1),
),
"limit" => 5,
));
我不熟悉这个框架,所以我不完全确定这是否正确,但我是基于等效MongoDB查询的正确语法:
db.places.find( { location : { $near : [50,50] , $maxDistance : 5 } } ).limit(5)
请注意,$maxDistance与$near处于相同的条件内。试试看,如果有帮助,请告诉我们。
谢谢,YiMongoDBSuite中的EMongoCriteria更改了mongo运营商的字符大小写,maxDistance将变为“$maxDistance”,然后mongodb服务器将忽略它并返回用户位置附近的所有100个项目。要使用MongoYii,它不会更改您的查询条件:EMongoDocuments不支持(至少是开箱即用)nearSphere。我更改了代码,但仍然没有使用maxDistance。我在中国有一个位置,它会突然出现在结果中。甚至尝试将0.00001作为最大距离。