我首先在Map/Reduce中使用PHP/MongoDB。運行MapReduce命令時出現錯誤。PHP MongoDB映射reduce db斷言失敗
我的代碼:
$map = "function() {".
"emit(this.topic_id, {re_date:this.date_posted}); " .
"}";
$reduce = "function (key, values) {" .
"var result = {last_post: 0};" .
"var max = ISODate('1970-01-01T00:00:00Z');" .
"values.forEach(function (value) {" .
"if (max == ISODate('1970-01-01T00:00:00Z')) {" .
"max = value.re_date;}" .
"if (max < value.re_date) {max = value.re_date;}});" .
"result.last_post = max;" .
"return result;" .
"}";
$mapFunc = new MongoCode($map);
$reduceFunc = new MongoCode($reduce);
$collection = new MongoCollection($db, 'posts');
$command = array(
'mapreduce' => $collection,
'map' => $mapFunc,
'reduce' => $reduceFunc,
"query" => array("topic_id" => "2116"),
"out" => array("merge" => "eventCounts"));
$threadInfo = $db->command($command);
$threadsCollection = $db->selectCollection($threadInfo['result']);
$stats = $statsCollection->find();
foreach ($stats as $stat) {
echo $stats['_id'] .' Visited ';
foreach ($stats['value']['types'] as $type => $times) {
echo "Type $type $times Times, ";
}
foreach ($stats['value']['tags'] as $tag => $times) {
echo "Tag $tag $times Times, ";
}
echo "\n";
}
當我跑我找回了錯誤的命令:
斷言錯誤類型字段(MapReduce的)3 = 2 assertionCode 13111
ERRMSG分貝!斷言失敗
好的0
我跟着非常密切的例子here所以我不知道什麼是goi恩錯了。 任何建議表示讚賞。
您EMIT的格式,導致減少功能必須是相同。你有一個re_date在另一個last_post。 – 2012-07-31 16:50:35
就是這樣,謝謝 – johnmcp 2012-07-31 21:07:55