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

Ole*_*leg 0 php mongodb mongodb-php

我需要这样做一个查询:

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

这应该是来自listid 59的所有订阅者,他们懂英语或西班牙语,或者(并且)不懂俄语.可以有任何可以有多个值的字段,而不是语言.看起来这个查询在mongodb控制台中有效.在这种情况下,一个字段可以处于几种条件.我有相同的字段不会在几个条件,也许它可能是这样的:

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

/*some other condition united with OR*/
                                                                        )));
Run Code Online (Sandbox Code Playgroud)

如何在PHP中进行此查询?

jmi*_*ola 6

这应该是来自listid 59的所有订阅者,他们懂英语或西班牙语并且不懂中文.

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

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

$or根据文档,不需要嵌套在自己的对象中.此外,如果您正在寻找具有知道两种语言而不是另一种语言的给定LISTID的文档,$and则更合适:

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

这将转换为PHP为:

$collection->find(array(
    'LISTID' => $listId,
    '$and' => array(
        array('LANG' => array('$in' => array('English', 'Spanish'))),
        array('LANG' => array('$ne' => 'Russian')),
    ),
));
Run Code Online (Sandbox Code Playgroud)