mongodb - php mongo 使用execute执行mapreduce报错
怪我咯
怪我咯 2017-04-11 10:22:38
0
1
256
$map = "function() {
for (var i = 0; i < this.items.length; i++) {
emit(this.name, this.items[i].$param); } }";
$reduce = "function(name, sum) { return Array.sum(sum); }";
$opt = "{ out: 'totals' }";
$db->execute("db.stores.mapReduce($map, $reduce, $opt);");

报错信息:

Cannot run mapReduce command from eval()
怪我咯
怪我咯

走同样的路,发现不同的人生

reply all(1)
阿神

execute方法通过eval执行JS代码。eval好像Mongo 3里是deprecated。eval也用个global write lock,最好不用。

你可以用command方法,PHP.net上有个mapReduce例子(http://php.net/manual/en/mong...),下面给你参考:

// construct map and reduce functions
$map = new MongoCode("function() { emit(this.user_id,1); }");
$reduce = new MongoCode("function(k, vals) { ".
    "var sum = 0;".
    "for (var i in vals) {".
        "sum += vals[i];". 
    "}".
    "return sum; }");

$sales = $db->command(array(
    "mapreduce" => "events", 
    "map" => $map,
    "reduce" => $reduce,
    "query" => array("type" => "sale"),
    "out" => array("merge" => "eventCounts")));

但是我建议这样简单的mapreduce可以通过aggregation framework写出来。

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!