我一直在尝试使用PHP中的mongo :: command来构建MapReduce,但每次运行代码时都会出现以下错误:PHP Fatal Error, call to undefined method "mongo:command"
我的代码:
try {
$map = new MongoCode("function() {
if (!this.tags) {
return;
}
for (index in this.tags) {
emit(this.tags[index], 1);
}");
$reduce = new MongoCode("function(previous, current) {
var count = 0;
for (index in current) {
count += current[index];
}
return count;
}");
$tags = $this->db->command(array( //Line the error is found on
"mapreduce" => "blog",
"map" => $map,
"reduce" => $reduce));
$con=$this->db->selectCollection($tags['result'])->find();
var_dump($con);
}
catch(MongoCursorException $e) {
echo "error message: ".$e->getMessage()."\n";
echo "error code: ".$e->getCode()."\n";
}
请注意$this->db
表示我的连接(之前已定义),blog
是集合。
作为参考,我使用过:http://php.net/manual/en/mongodb.command.php
我使用的操作系统是Ubuntu 12.04并且我已经仔细检查了两个php.ini文件,这些文件都包含mongo.so - 我可以使用mongodb进行常规查询,例如插入和获取数据,它只是命令似乎不起作用。
答案 0 :(得分:0)
你选择像$d = $m->demo;
php.net:
<?php
$m = new MongoClient();
$d = $m->demo;
$c = $d->poiConcat;
$r = $d->command(array(
'geoNear' => "poiConcat", // Search in the poiConcat collection
'near' => array(-0.08, 51.48), // Search near 51.48°N, 0.08°E
'spherical' => true, // Enable spherical search
'num' => 5, // Maximum 5 returned documents
));
print_r($r);
?>
我认为在您的代码中您没有选择集合$d = $this->db->demo;
放置集合名称而不是demo
try {
$map = new MongoCode("function() {
if (!this.tags) {
return;
}
for (index in this.tags) {
emit(this.tags[index], 1);
}");
$reduce = new MongoCode("function(previous, current) {
var count = 0;
for (index in current) {
count += current[index];
}
return count;
}");
$d = $this->db->demo;// attention
$tags = $d->command(array( //Line the error is found on
"mapreduce" => "blog",
"map" => $map,
"reduce" => $reduce));
$con=$d->selectCollection($tags['result'])->find();
var_dump($con);
}
catch(MongoCursorException $e) {
echo "error message: ".$e->getMessage()."\n";
echo "error code: ".$e->getCode()."\n";
}
编辑样本:我这个样本看到它
try {
$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; }");
$db=new Mongo("mongodb://sepidar:123@localhost:27017/admin");
$d = $db->SepidarSoft_CBMS;// attention
$tags = $d->command(array( //Line the error is found on
'mapReduce'=>'RunUser',
"map" => $map,
"reduce" => $reduce,
"out" => array('merge'=>'SepidarSoft_CBMS', 'db'=> 'RunUser')
));
print_r($tags);
}
catch(MongoCursorException $e) {
echo "error message: ".$e->getMessage()."\n";
echo "error code: ".$e->getCode()."\n";
}
结果
Array
(
[result] => Array
(
[db] => RunUser
[collection] => SepidarSoft_CBMS
)
[timeMillis] => 2
[counts] => Array
(
[input] => 1
[emit] => 1
[reduce] => 0
[output] => 1
)
[ok] => 1
)