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中进行此查询?
这应该是来自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)