PHP mongo聚合:匹配同一字段上的多个值

时间:2014-11-29 02:50:03

标签: php mongodb aggregation-framework

我需要管道来匹配字段'modelName'等于'movies'或'tv_shows'的文档。我尝试了下面的代码,但它只匹配'tv_shows'并忽略'电影'。

$match = array('$match' => array('modelName' => 'movies', 'modelName' => 'tv_shows'));

整个脚本:

<?php

   $connection = new MongoClient;
   $collection = $connection -> selectDB("getglue") -> selectCollection("gg");
   MongoCursor::$timeout = -1;

   $match = array('$match' => array('modelName' => 'movies', 'modelName' => 'tv_shows'));
   $group = array('$group' => array('_id' => '$title', 'total' => array('$sum' => 1)));
   $sort = array('$sort' => array('total' => -1));
   $limit = array('$limit' => 7);
   $pipeline = array($match, $group, $sort, $limit);

   $out = $collection -> aggregate($pipeline);

   echo json_encode($out, JSON_PRETTY_PRINT);

?>

1 个答案:

答案 0 :(得分:1)

使用$or运算符:

$match = array('$match' => 
                 array('$or' => array(array("modelName" => "movies"),
                                array("modelName" => "tv_shows"))
                      )
     );

PHP中的array实际上是ordered map。对于任何键,映射只能有一个值,最后添加的值将覆盖同一键的任何先前值。因此,在下面,tv_shows这是键的最后添加值 - modelName将被关联为唯一的值。这就是为什么您只能获得modelname tv_shows的结果。

'$match' => array('modelName' => 'movies', 'modelName' => 'tv_shows')