PHP/MongoDB を使用した Map/Reduce に初めて取り組みました。MapReduce コマンドを実行するとエラーが発生します。
私のコード:
$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 db アサーションの失敗
ok 0
ここの例にかなり厳密に従っているので、何が間違っているのかわかりません。任意の提案をいただければ幸いです。