2012-01-27 50 views
3

試圖做一個簡單的MongoDB查詢驅使我瘋了....我有如下表/ DB:MongoDB的查詢 - 不能讓它工作

[_id] => MongoId Object (
    [$id] => 4f22efa1ef9dec8495b374bc 
) 
[h1] => a 
[h2] => b 
[h3] => c 

[_id] => MongoId Object (
    [$id] => 4f22efa1ef9dec8495b374bd 
) 
[h1] => d 
[h2] => e 
[h3] => f 

使用蒙戈工具命令行和打字:

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

你最好不要使用$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的錯誤日誌看看它說一些有關非法條件鬆散的頂層數組。

+0

謝謝!發現 :-) – user1174460 2012-01-30 09:14:02