Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Yii emongo忽略maxDistance查询附近的文档_Php_Mongodb_Geolocation_Yii - Fatal编程技术网

Php Yii emongo忽略maxDistance查询附近的文档

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)), ),

我正在尝试使用$near查找用户附近的位置

    $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作为最大距离。