来自php的Mongodb查询 - 无法使其正常工作

时间:2012-01-27 22:06:21

标签: php mongodb

尝试做一个让我疯狂的简单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天(或者我认为是这样)3天,但它不起作用。如果我使用'> =''< =''<>'进行查询'<' '>'它工作正常,但使用'=',因为在这种情况下它没有。

感谢您的努力!

1 个答案:

答案 0 :(得分: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错误日志,很可能会在条件中说明非法松散的顶级数组。