Yii Emongodocuments在忽略maxDistance的查询附近

时间:2012-11-12 18:36:20

标签: php mongodb geolocation yii

我正在尝试使用$ 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似乎不支持它们。

所以我错过了一些明显的东西吗?

我知道mongomapper-near-with-maxdistance-mongooperationfailure-geo-values-have-to,但没有任何帮助。

编辑:改变经度线的顺序

3 个答案:

答案 0 :(得分:0)

MongoDB需要以下格式的坐标:纬度,经度。你的阵列有错误的方法。距离应以度为单位,除非您使用nearSphere。来自nearSphere的结果应该与near相似,因此EMongoDocuments应该支持。如果您使用nearSphere,则maxdistance位于弧度中,因此如果您使用它,则将距离(以km为单位)除以地球半径(以km为单位,约为6371)。

答案 1 :(得分:0)

引用蒙古人的神奇家伙: 我相信你需要将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的条件相同。尝试一下,让我们知道它是否有帮助。 谢谢,

答案 2 :(得分:0)

YiiMongoDbSuite中的EMongoCriteria更改了mongo操作符' char case,maxDistance将变成" $ maxdistance",然后mongodb服务器将忽略它并返回用户位置附近的所有100个项目。要使用MongoYii,它不会更改您的查询条件:http://sammaye.github.io/MongoYii/