试图做一个让我发狂的简单mongodb查询….我有以下表/ db:
[_id] => MongoId Object (
[$id] => 4f22efa1ef9dec8495b374bc
)
[h1] => a
[h2] => b
[h3] => c
[_id] => MongoId Object (
[$id] => 4f22efa1ef9dec8495b374bd
)
[h1] => d
[h2] => e
[h3] => f
使用mongo工具命令行并输入:
db.things.find({$or: [{'h1' : 'a'},{'h1': 'd'}]})
我得到:
{ "_id" : ObjectId("4f22efa1ef9dec8495b374bc"), "h1" : "a", "h2" : "b", "h3" : "c" }
{ "_id" : ObjectId("4f22efa1ef9dec8495b374bd"), "h1" : "d", "h2" : "e", "h3" : "f" }
没关系但是尝试从PHP执行相同操作,我什么也没得到?
$m = new Mongo();
$db = $m->selectDB('testdb');
$collection = new MongoCollection($db, 'things');
$query = array( '$or' => array( array('h1' => 'a')),
array('h1' => 'd'));
$cursor = $collection->find($query);
我看不到我在做什么错,但是我已经尝试了3天(或者我认为是这样),但无法正常工作.如果我使用’> =”< =''<>‘ ‘‘它可以正常工作,但使用’=’则不能.
谢谢你的努力 !
解决方法:
对于给定的示例,最好使用$in,即:
$collection->find(array('h1' => array('$in' => array('a', 'd'))));
至于为什么查询不起作用-您没有正确使用$或(或实际上).这是您在重新格式化的问题中输入的查询:
$query = array(
'$or' => array(
array('h1' => 'a')
),
array('h1' => 'd')
);
而您将需要:
$query = array(
'$or' => array(
array('h1' => 'a'),
array('h1' => 'd')
)
);
如果您查看mongodb错误日志,很可能会说出这种情况下该非法松散顶级数组的内容.
标签:mongodb,php
来源: https://codeday.me/bug/20191201/2083599.html