【问题标题】:Map Reduce in Mongo, Convert mongo query to php mongo在 Mongo 中映射 Reduce,将 mongo 查询转换为 php mongo
【发布时间】:2013-08-10 14:45:49
【问题描述】:

我在 mongo 中有一个查询,看起来像

db.Table_Name.group({
   "key": { "Camp": true },
   "initial": { "Clicks": 0 },
   "reduce": function(obj, prev) {
       prev.Clicks = prev.Clicks + obj.Clicks-0;
   },
   "cond": { "Date": { $gte: "2012-10-26", $lte: "2012-10-28" } }
});

我想在 php.ini 中使用这段代码。我尝试了所有可能的方法。任何人都可以帮助我解决这个问题。即使我关注了这个http://php.net/manual/en/mongodb.command.php请任何人帮助我。

我试过了

$reduce = new MongoCode(
    "function(obj, prev) {prev.Clicks = prev.Clicks + obj.Clicks-0;}"
);

$result = $db_1->command(array(
    'mapreduce' => 'Collection_Name',
    'key'       => array("Camp" => true),   
    'initial'  => array('Clicks' => 0), 
    'reduce' => $reduce,                
    'cond' => array(
        'Date' => array('$gte' => '2010-07-12' , '$lte' => '2013-07-12')
     ), 
));

【问题讨论】:

    标签: php mongodb mapreduce


    【解决方案1】:

    您是否尝试过使用MongoCollection::group?对于您的示例,它可能看起来像这样(未经测试)。

    $keys = array("Camp" => 1);
    $initial = array("Clicks" => 0);
    $reduce = "function(obj, prev) {prev.Clicks = prev.Clicks + obj.Clicks-0;}";
    $condition = array(
        'Date' => array('$gte' => '2010-07-12', '$lte' => '2013-07-12')
    );
    $result = $collection->group($keys, $initial, $reduce, $condition);
    

    另外,您应该尝试接受 MongoDB 术语,我知道这只是一个示例,但 Table_Name 应该是 Collection_NameMongoDb does not have tables

    【讨论】:

    • 表格;集合......对最终用户来说差别不大,如果他很乐意称它们为表格,那么我真的看不出问题
    • 嗨,Sammaye,是的,你是对的,没有真正的“问题”......但是,从长远来看,使用错误的术语只会让你的大脑感到困惑。更不用说如果你使用了错误的术语,或者更糟糕的面试,你在会议中的样子。
    • 谢谢帮忙,能不能说一下如何按日期排序。
    【解决方案2】:

    您可以在这里使用 group 命令,但它是:

    • 基本上是 Map Reduce
    • JavaScript
    • 通常不适用于分片(有些人已经做到了)
    • 已弃用,取而代之的是聚合框架

    更好的选择是使用聚合框架:

    $mongo->db->collection->aggregate(array(
        array('$match'=>array('date'=>array('$gte' => '2010-07-12','$lte' => '2013-07-12'))),
        array('$group'=>array('_id'=>'$Camp', 'sum_clicks'=>array('$sum'=>'$Clicks')))
    ));
    

    【讨论】:

      猜你喜欢
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      • 2021-06-19
      • 2019-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-07
      相关资源
      最近更新 更多