【问题标题】:Mongo Map Reduce with PHPMongo Map Reduce 与 PHP
【发布时间】:2013-04-25 15:04:52
【问题描述】:

我是 mongo 的新手,我正在尝试计算“代码”列表的条目数

例如。

名为“CODE”的字段中的数据

asd
fgh
jkl
asd

我试图解决的想法是如何做相当于 MySQL 的:

select count(id) from table where (CODE='asd' or CODE='fgh') group by CODE

让它返回:

asd 2
fgh 1

并忽略 jkl 统计数据

给定以下起点:

$db = $connection->$database;
$collection = $db->$table;

我该怎么做,我已经阅读了 mongo 中的 map/reduce,但目前对我来说没有多大意义。

非常感谢您提供一些指导以使其发挥作用。

【问题讨论】:

    标签: php mongodb mapreduce


    【解决方案1】:

    您可以使用 Map Reduce,也可以使用聚合框架,这对 SQL 人员来说可能更有意义:

    $collection->aggregate(array(
        array('$match' => array('CODE' => array('$in' => array('asd','fgh')))),
        array('$group' => array('_id' => '$CODE', 'count' => array('$sum' => 1)))
    ));
    

    类似于:

    select count(id) from table where (CODE='asd' or CODE='fgh') group by CODE
    

    并且会返回:

    {
        {_id: asd, count: 2},
        //next document
    }
    

    作为参考,您可以通读文档并在此处查看示例:http://docs.mongodb.org/manual/core/aggregation/

    【讨论】:

    • 感谢您的帮助,成功了!我唯一需要改变的就是改变: array('$group' => array('_id' => 'CODE', 'count' => array('$sum' => 1))) 到 array(' $group' => array('_id' => '$CODE', 'count' => array('$sum' => 1)))
    • @CharlieSmith Ops 是的,那里犯了一个错误 :)
    • @Sammaye 那你为什么不修正答案中的错误呢?
    • @AsyaKamsky 因为 OP 已经找到了解决方法,但是好的,我会编辑
    猜你喜欢
    • 1970-01-01
    • 2014-06-02
    • 1970-01-01
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多