2012-05-18 68 views
0

幾個條件,我需要做這樣的查詢:查詢與場中的mongodb

db.subscribers.find({LISTID: 59, {$or: [{LANG: {$in: ['English', 'Spanish']} }, 
             {LANG: {$nin: ['Russian']} }]} }); 

它應該得到listid 59的所有用戶,誰知道英文或西班牙文或(和)不懂俄語。可以有任何字段可以有多個值,而不是語言。 它看起來像這個查詢在mongodb控制檯中工作。 在這種情況下,一個字段可能有幾種情況。 我有相同的字段不會在幾個條件,也許它可能是這樣的:

$collection->find(array('LISTID' => $listId, 
         array('$or' = array(LANG => array('$in' => array('English','Spanish')), 

/*some other condition united with OR*/ 
                     ))); 

如何使PHP這個查詢?

+0

爲什麼你寫:「列表id = 59或LANG!='俄語」,它應該是AND。 – Oleg

+0

有必要找到來自listid = 59的所有用戶,他們知道英語或西班牙語,並且不知道中文。 – Oleg

+0

我根本沒有看到任何問題。你有看到?你能解釋一下你看到了什麼問題嗎? – Oleg

回答

6

它應該得到listid 59的所有用戶,誰知道英語或西班牙語,不知道中國。

如果這是你查詢的目的(我假設你的意思是「俄羅斯」,而不是「中國人」),我沒有看到你原來控制檯的查詢是如何工作的:

db.subscribers.find({ 
    LISTID: 59, 
    { $or: [ 
     { LANG: { $in: ["English", "Spanish"] } }, 
     { LANG: { $nin: ["Russian"] } } 
    ] } 
}); 

$or needn」根據documentation嵌套在自己的對象中。另外,如果你正在尋找與給定LISTID是知道兩種語言,但文件不是另一個,$and似乎更爲合適:

db.subscribers.find({ 
    LISTID: 59, 
    $and: [ 
     { LANG: { $in: ["English", "Spanish"] } }, 
     { LANG: { $ne: "Russian" } } 
    ] 
}); 

這將轉化爲PHP:

$collection->find(array(
    'LISTID' => $listId, 
    '$and' => array(
     array('LANG' => array('$in' => array('English', 'Spanish'))), 
     array('LANG' => array('$ne' => 'Russian')), 
    ), 
)); 
+0

對不起,我的意思是:「它應該讓所有的用戶都來自listid 59,他們知道英語或西班牙語,或者(並且)不懂俄語。」我糾正了我的帖子。 – Oleg

+0

它看起來$或作爲嵌套。在任何情況下,感謝您對嵌套$或者的評論。 – Oleg

+0

問題是關於php代碼。我想我在第一個答案中回答這個問題。如果你有任何關於PHP的建議,你也可以給你的PHP代碼,也許你可以看到我的答案有任何問題。 – Oleg

1

我認爲解決的辦法是這樣的:

$number = $collection->find(array('LISTID' => $listId, 
            '$or' => array(array('LANG' => array('$in' => array('English', 'Spanish'))), 
                array('LANG' => array('$nin' => array('Russian'))), 
               )))->count(); 
1
// Find record according to specific column 
$getfollower = $dbnew1->find(array('follower' => $follower), 
          array('page_name' => 1, 'id'=>1, '_id'=>0));