Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mongodb中多个条件下的字段查询_Php_Mongodb_Mongodb Php - Fatal编程技术网

Php mongodb中多个条件下的字段查询

Php mongodb中多个条件下的字段查询,php,mongodb,mongodb-php,Php,Mongodb,Mongodb Php,我需要进行如下查询: db.subscribers.find({LISTID: 59, {$or: [{LANG: {$in: ['English', 'Spanish']} }, {LANG: {$nin: ['Russian']} }]} }); $number = $collection->find(array('LISTID' => $listId,

我需要进行如下查询:

db.subscribers.find({LISTID: 59, {$or: [{LANG: {$in: ['English', 'Spanish']} }, 
                                        {LANG: {$nin: ['Russian']} }]}  });
$number = $collection->find(array('LISTID' => $listId, 
                                  '$or' => array( array('LANG' => array('$in' => array('English', 'Spanish'))),
                                                  array('LANG' => array('$nin' => array('Russian'))),
                                                ) ))->count();
它应该得到Listid59的所有订户,他们懂英语或西班牙语,也不懂俄语。任何字段都可以有多个值,而不是语言。 看起来这个查询在mongodb控制台中工作。 在这种情况下,一个字段可以有多种情况。 我认为同一个领域在几种情况下都不会出现,可能是这样的:

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

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

如何在php中进行此查询?

我认为解决方案如下:

db.subscribers.find({LISTID: 59, {$or: [{LANG: {$in: ['English', 'Spanish']} }, 
                                        {LANG: {$nin: ['Russian']} }]}  });
$number = $collection->find(array('LISTID' => $listId, 
                                  '$or' => array( array('LANG' => array('$in' => array('English', 'Spanish'))),
                                                  array('LANG' => array('$nin' => array('Russian'))),
                                                ) ))->count();
它应该得到Listid59的所有订户,他们懂英语或西班牙语,不懂中文

如果这是您查询的目的,我假设您指的是俄语而不是汉语,我不知道您最初的控制台查询是如何工作的:

db.subscribers.find({
    LISTID: 59,
    { $or: [
        { LANG: { $in: ["English", "Spanish"] } },
        { LANG: { $nin: ["Russian"] } }
    ] }
});
根据属性,$或不必嵌套在它自己的对象中。另外,如果您正在查找具有给定LISTID的文档,这些文档只懂两种语言,而不懂另一种语言,并且似乎更合适:

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')),
    ),
));

为什么要写:list id=59或LANG!='俄语,应该是和。有必要找到listid=59的所有订户,比如说,他们懂英语或西班牙语,但不懂中文。我在这个问题上根本看不到任何否定词。你看到了吗?你能解释一下你认为它有什么问题吗?$或[LANG in,LANG not in‘俄语’]将匹配除俄语以外的任何语言-不管in是什么,因为所有语言都不匹配俄语。您的php代码有解析错误-基本上您不希望执行该查询或使用问题中的代码。不管怎样,祝你好运。例如,也许它不是很好,而不是,或者它可能是和。没关系。问题是如何在多种情况下使用一个字段,如示例中的LANG。对不起,我的意思是:它应该获得Listid59的所有订户,这些订户懂英语或西班牙语,或者不懂俄语。我更正了我的帖子。它看起来像$or一样嵌套。无论如何,感谢您对嵌套$or的评论。问题是关于php代码的。我想我在第一个答案中回答了这个问题。如果您对php有任何建议,您也可以给出您的php代码,也许您可以看到我的答案有任何问题。刚刚编辑以删除{}包装。还添加了一个PHP翻译,非常简单。是的,它与我自己的答案是相同的解决方案。无论如何,谢谢你的回答。