我有以下数组:
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}}]}
我的阵列应该可以工作,但是,嘿,它没有,请指出我做错了什么。
谢谢!
答案 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}