0

我有以下数组:

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

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

谢谢!

4

3 回答 3

1

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

array(
    'data.cars' => 44,
    'data.xp' => array(
        '$gt' => 100,
        '$lt' => 500
    ),
    'data.money' => array(
        '$gt' => 200,
        '$lt' => 1000
    )
)
于 2013-11-11T14:22:40.747 回答
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 上看不到它,所以我所做的是对这些值进行强制转换......它工作了:)

感谢大家的努力和关注!

于 2013-11-11T15:33:41.597 回答
0

首先它真的不好用。或键名中的 $ 符号(我实际上认为这是非法的)。这是因为点运算符用于访问子文档。

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

于 2013-11-11T12:14:52.437 回答