0

我需要进行这样的查询:

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

4

3 回答 3

6

它应该得到来自listid 59的所有订阅者,他们会英语或西班牙语并且不会中文。

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

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

$or根据文档,不需要嵌套在它自己的对象中。此外,如果您正在寻找具有给定 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')),
    ),
));
于 2012-05-18T17:35:32.223 回答
1
// Find record according to specific column
$getfollower = $dbnew1->find(array('follower' => $follower),
                             array('page_name' => 1, 'id'=>1, '_id'=>0));
于 2013-05-08T09:54:37.787 回答
1

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

$number = $collection->find(array('LISTID' => $listId, 
                                  '$or' => array( array('LANG' => array('$in' => array('English', 'Spanish'))),
                                                  array('LANG' => array('$nin' => array('Russian'))),
                                                ) ))->count();
于 2012-05-18T15:56:24.960 回答