我需要进行这样的查询:
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中进行此查询?
答案 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));