Mongodb php复合查询不返回任何内容


Mongodb php compound query returns nothing

我有以下数组:

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}}]}

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

谢谢!

MongoDB PHP 上的查询应格式化如下:

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

通过在两个版本的数组上做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上看不到,所以我所做的是对值施加的强制,然后......它:)

谢谢大家的努力和兴趣!

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

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