我在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中使用此代码。我尝试了所有可能的方法。任何人都可以帮助我摆脱这个问题。即使我遵循这个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')
),
));
答案 0 :(得分:2)
您是否尝试过使用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_Name
为MongoDb does not have tables。
答案 1 :(得分:0)
您可以在此处使用group命令,但它是:
相反,更好的选择是使用聚合框架:
$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')))
));