我需要管道来匹配字段'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);
?>
答案 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')