我在mongoDB中使用动态查询,通过这种方式使用它们:
$query['clicks'] = array('$gt' => 6);
$query['lang'] = "de";
$cursor = $collection->find($query);
问题非常简单明了:如何添加“OR”条件?例如,让'lang'成为“de”或“fr”;
因为现在,Mongo暗示“点击”和“lang”之间存在AND。那么我如何构建点击> 6&& (lang =='de'|| lang =='fr')
答案 0 :(得分:1)
$cond=array();
$cond=array_merge($cond,array("clicks" => array('$gt' =>6)));
$cond=array_merge($cond,array("$or" => array(array("lang" =>'de'),array("lang" =>'fr'))));
$cursor = $collection->find($cond);
----------------------------
another way is :
$cond=array();
$cond=array_merge($cond,array("clicks" => array('$gt' =>6)));
$cond=array_merge($cond,array("$in" => array('de','fr')));
$cursor = $collection->find($cond);
答案 1 :(得分:0)
你可以尝试如下
$query['clicks'] = array('$gt' => 6);
$query['$or'] = array(array('lang' => 'de'), array('lang' => 'fr'));
$cursor = $collection->find($query);
如何在运营商中添加$
$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);
答案 2 :(得分:0)
$or
很好,但不是非常友好的索引,特别是当你开始进入更多样化的范围时。使用$in
:
$db->collection->find(array('clicks' => array('$gt' => 6),
'lang' => array('$in' => array('fr', 'de'))));
这有时会更有效地使用索引。
另请注意,嵌套的$or
当前不使用索引,但$or
可以使用多个索引计划,这意味着像这样的查询:
$db->collection->find(array('clicks' => array('$gt' => 6), '$or' => array(
array('lang' => 'fr'), arrray('lang' => 'de')
))
可以使用多个索引,但在这种情况下它只是无用的,因为它只会覆盖一个字段,所以最好使用$in
。