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翻译,非常简单。是的,它与我自己的答案是相同的解决方案。无论如何,谢谢你的回答。