PHP,Mongo查询使用或点符号

时间:2012-04-30 08:57:40

标签: mongodb mongodb-query mongodb-php notation

我有一个让我疯狂的问题!

我需要在PHP中翻译以下Mongo查询:

db.mycollection.find({$or: [ {'field.a': 45.4689, 'field.b': 9.18103}, {'field.a' : 40.71455, 'field.b': -74.007124} ]})

它完全可以从shell中运行。

我认为查询应该按照以下方式转换为PHP(var_dump):

Array
    (
        [$or] => Array
            (
                [0] => Array
                    (
                        [field.a] => 45.468945
                        [field.b] => 9.18103
                    )

                [1] => Array
                    (
                        [field.a] => 40.71455
                        [field.b] => -74.007124
                    )

            )

    )

但我在PHP中没有结果!

为什么呢? 怎么了? 什么是正确的语法?

谢谢!

1 个答案:

答案 0 :(得分:3)

你的语法对我来说似乎很好,我认为主要的问题是你使用的浮点数并不像你想象的那么准确 - 特别是如果你自己混淆了45.4689和45.468945。要直接比较浮点数,您应该总是添加一个小的模糊因子。

在这种情况下,您似乎使用坐标?如果是这样的话,我建议你:

  • 交换a和b字段(以便获得经度,然后是纬度)
  • 在“field”上创建一个2d索引:ensureIndex(array('field'=>'2d'));
  • 使用geoNear,最小距离小,限制为1,

这应该是一种更好的扫描点的方法。你必须运行两次查询,因为geoNear命令不能执行$或。

如果你只有一组离散的点(就像你的评论似乎表明的那样),那么我建议不要查询浮点数,而只是添加一个命名城市的字段。