在mongodb中用几个条件中的字段查询

时间:2012-05-18 11:39:51

标签: php mongodb mongodb-php

我需要进行这样的查询:

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中进行此查询?

3 个答案:

答案 0 :(得分:6)

  

它应该让所有来自listid 59的用户知道英语或西班牙语并且不懂中文。

如果这是您查询的目标(我假设您的意思是“俄语”而不是“中文”),我看不到原始控制台查询的工作原理:

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

$or不需要根​​据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')),
    ),
));

答案 1 :(得分:1)

我认为解决方案是这样的:

$number = $collection->find(array('LISTID' => $listId, 
                                  '$or' => array( array('LANG' => array('$in' => array('English', 'Spanish'))),
                                                  array('LANG' => array('$nin' => array('Russian'))),
                                                ) ))->count();

答案 2 :(得分:1)

// Find record according to specific column
$getfollower = $dbnew1->find(array('follower' => $follower),
                             array('page_name' => 1, 'id'=>1, '_id'=>0));