试着做一个简单的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);

我看不出我做错了什么,但我已经试了三天了(或者我认为是这样),这是行不通的。如果我使用'>='''''''进行查询,它可以正常工作,但使用'='与本例中的情况一样,它不能正常工作。
谢谢你的努力!

最佳答案

对于给定的示例,最好使用$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错误日志,很有可能会看到一些关于条件中的非法松散顶级数组的信息。

关于php - 来自php的Mongodb查询 - 无法使其正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9040697/

10-15 23:14
查看更多