Mongodb,使用聚合与过滤器结合?

时间:2014-10-19 22:23:51

标签: php mongodb aggregation-framework

我正在尝试转换基于mysql数据库的PHP脚本,以便在MongoDB数据库上运行它。我已经解决了除一个以外的主要查询。

想象一下,我有一个库(这是集合),每个文档都是一本书。所以我需要知道在某个语言(另一个领域)中有多少不同的作者在库中。

目前我有那段代码,我不知道如何继续:

$test = array(
    array(
        '$group' => array(
            '_id' => array('author' => '$author' )
        )
    )
);
$out = $db->$collection->aggregate($test);  

感谢。

1 个答案:

答案 0 :(得分:0)

如果要放置过滤器,则需要使用 $ match 启动管道,命令将为:

db.collection.aggregate([
  { "$match" : {lang : "en"} },
  {"$group":{"_id": {"author" : "$author"} , "total" : {"$sum" : 1} }} 
])

如果将其转换为PHP,则为:

$test = array(
  array('$match' => array("lang" => "en")),
  array(
    '$group' => array(
        "_id" => array('author' => '$author'),
                    "total" => array('$sum' =>  1)
    ),
  ),
);

在这种情况下,您必须在第一步(匹配/过滤)中传递语言。

如果你想能够使用所有语言"你只需要将语言放在$ group运算符

db.collection.aggregate([
  {"$group":{"_id": {"author" : "$author", lang : "$lang"} , "total" : {"$sum" : 1} }} 
])

我让你用PHP推送它

您可以在此处找到有关 $ match 的更多信息: http://docs.mongodb.org/manual/reference/operator/aggregation/match/

相关问题