2012-05-18 70 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));