MapReduce () का उपयोग करते समय यह याद रखना महत्वपूर्ण है कि कम () फ़ंक्शन का रिटर्न मान उसी आकार का होना चाहिए जैसा कि आप कम () फ़ंक्शन के 'मान' तत्व में प्राप्त करने की अपेक्षा करते हैं - और वह, बदले में, उसी आकार का होना चाहिए जैसा कि एमिट () फ़ंक्शन द्वारा उत्सर्जित होता है।
निम्नलिखित प्रपत्र के दस्तावेजों वाले संग्रह को देखते हुए:
> db.posts.count();
1000
> db.posts.findOne();
{
"_id" : 0,
"date_posted" : ISODate("2012-04-04T05:54:44.535Z"),
"topic_id" : "sierra"
}
निम्न कोड आपके इच्छित आउटपुट का उत्पादन करेगा:
<?php
$conn = new Mongo("localhost:$port");
$db = $conn->test;
$collection = $db->tst;
$map = new MongoCode(
"function() { emit( this.topic_id, { last_post: this.date_posted } ); }"
);
$reduce = new MongoCode(
"function(key, values) { ".
"var max = ISODate('1970-01-01T00:00:00Z'); ".
"values.forEach(function(val) { ".
"if ( max < val.last_post ) max = val.last_post; ".
"}); ".
"return {last_post : max}; " .
"}"
);
$result = $db->command( array(
"mapreduce" => "posts",
"map" => $map,
"reduce" => $reduce,
"query" => array( "topic_id" => "alpha"),
"out" => array( "merge" => "lastPosts")
)
);
echo "result: "; print_r($result);
$collection = $db->lastPosts;
$cursor = $collection->find()->limit(6);
date_default_timezone_set("UTC");
foreach( $cursor as $doc ) {
$date = date( "r", $doc['value']['last_post']->sec );
echo $doc['_id'] . " last visited at " . $date ."\n" ;
}
?>