PHP + MongoDB动态查询 - 添加条件运算符

时间:2012-10-05 08:17:32

标签: php mongodb dynamicquery

我在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')

3 个答案:

答案 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