Mongodb php复合查询什么都不返回

时间:2013-11-11 11:58:24

标签: php mongodb mongodb-php

我有以下数组:

Array
(
    [data.cars] => 44
    [data.xp] => Array
        (
            [$gte] => 100
            [$lte] => 500
        )

    [data.money] => Array
        (
            [$gte] => 200
            [$lte] => 1000
        )

)

将此数组发送到find时,它返回NULL。 我做错了什么,我根据这个页面编写了它,在这里:

http://us1.php.net/manual/en/mongo.sqltomongo.php

所以基本上,如果我有

SELECT * FROM mytable WHERE data.cars = 44 AND data.xp >= 100 AND data.xp <= 500 AND data.money >= 200 AND data.money <= 1000

在控制台中运行时,此查询可提供4个结果。

以下是查询:

{$and:[{"data.cars":44}, {"data.xp": {$gt:100, $lt:500}}, {"data.money": {$gt:200, $lt:1000}}]}

我的阵列应该可以工作,但是,嘿,它没有,请指出我做错了什么。

谢谢!

3 个答案:

答案 0 :(得分:1)

关于MongoDB PHP的查询应该格式如下:

array(
    'data.cars' => 44,
    'data.xp' => array(
        '$gt' => 100,
        '$lt' => 500
    ),
    'data.money' => array(
        '$gt' => 200,
        '$lt' => 1000
    )
)

答案 1 :(得分:1)

通过对两个版本的数组执行json_encode(),乍一看似乎都是相同的,但正如您将看到的,它们不是,我发现了“错误”。

这两个阵列看起来都是这样:

array(
    'data.cars' => 44,
    'data.xp' => array(
        '$gt' => 100,
        '$lt' => 500
    ),
    'data.money' => array(
        '$gt' => 200,
        '$lt' => 1000
    )
);

一个是硬编码的,另一个是动态构建的,但两个json编码都不同,这里是:

{"data.cars":"44","data.xp":{"$gte":"100","$lte":"500"},"data.money":{"$gte":"200","$lte":"1000"}}

{"data.cars":44,"data.xp":{"$gte":100,"$lte":500},"data.money":{"$gte":200,"$lte":1000}}

第一个数组的值为字符串,但在普通的print_r或var_dump上看不到,所以我所做的是对值施加强制并且...... WORKED :)

感谢所有人的努力和兴趣!

答案 2 :(得分:0)

首先,使用它真的很糟糕。或键名中的$符号(我实际上认为this is illegal)。这是因为点运算符用于访问子文档。

所以首先要改变这一点。第二件事是你不需要$和那里。因此,如果您想要找到具有= 1和b = 2的文档,那么您不需要执行{$and : .... }所有您需要做的就是{a : 1, b : 2}