PHP+;MongoDB动态查询-添加条件运算符
我在mongoDB中使用动态查询,通过以下方式使用它们:PHP+;MongoDB动态查询-添加条件运算符,php,mongodb,dynamicquery,Php,Mongodb,Dynamicquery,我在mongoDB中使用动态查询,通过以下方式使用它们: $query['clicks'] = array('$gt' => 6); $query['lang'] = "de"; $cursor = $collection->find($query); 问题非常简单明了:如何添加“或”条件?例如,将“lang”和“de”都表示为“de”或“fr” 因为现在,Mongo暗示在“点击”和“语言”之间有一个AND。那么,我如何构造单击>6&&(lang='de'| | lang='fr
$query['clicks'] = array('$gt' => 6);
$query['lang'] = "de";
$cursor = $collection->find($query);
问题非常简单明了:如何添加“或”条件?例如,将“lang”和“de”都表示为“de”或“fr”
因为现在,Mongo暗示在“点击”和“语言”之间有一个AND。那么,我如何构造单击>6&&(lang='de'| | lang='fr')您可以尝试如下
$query['clicks'] = array('$gt' => 6);
$query['$or'] = array(array('lang' => 'de'), array('lang' => 'fr'));
$cursor = $collection->find($query);
如何添加$in运算符
$query['clicks'] = array('$gt' => 6);
$query['$or'] = array(array('lang' => 'de'), array('lang' => 'fr'));
$query['_id'] = array('$in' => array(new mongoId('506d95bc5c73952c14000002'), new mongoId('506d95bc5c73952c14000003')));
$cursor = $collection->find($query);
$或
很好,但对索引不太友好,尤其是当您开始进入更多样化的范围时。在中使用$in是一种索引友好的方法:
$db->collection->find(array('clicks' => array('$gt' => 6),
'lang' => array('$in' => array('fr', 'de'))));
这有时会使索引的使用更加有效
还请注意,嵌套的$或当前不使用索引,但是$或可以使用多个索引计划,这意味着类似这样的查询:
$db->collection->find(array('clicks' => array('$gt' => 6), '$or' => array(
array('lang' => 'fr'), arrray('lang' => 'de')
))
将能够使用多个索引,但在这种情况下,它是无用的,因为它只涉及一个字段,所以最好在
中使用$in谢谢。为了简单起见,您得到了正确的答案。简单介绍一下:$query['$or']=array(array('lang'=>'fr')、array('lang'=>'de');$query[''$或']=数组(数组(''u id'=>newmongoid('506D95BC5C73952C1400002'))代码>如何将第二个“或”添加到第一个?现在的情况是,它只是覆盖了它。我知道这超出了问题的范围,但是,好吧,你想现在这样点击>6&&(lang='de'| | lang='fr'| | | | u id='506d95bc5c73952c14000002')吗?是的,但不完全是这样。我想知道如何动态添加更多ORs(我需要循环使用一些ID并添加它们。这与问题没有多大关系,但是,如果你能帮助的话,我将不胜感激。新的或不必在制动器中是必须使用的还是?你可以使用$in运算符来列出_idoh,你是对的!!不记得有$in,啊哈。谢谢你的回答!它是这对我帮助很大:)
$db->collection->find(array('clicks' => array('$gt' => 6), '$or' => array(
array('lang' => 'fr'), arrray('lang' => 'de')
))