आप इसे वास्तव में एम/आर के साथ कर सकते हैं। getTimestamp()
एम/आर में काम करता है क्योंकि यह सर्वर पर जावास्क्रिप्ट में चलता है, इससे कोई फर्क नहीं पड़ता कि आपकी क्लाइंट भाषा PHP है या पायथन:
map = function() {
var datetime = this._id.getTimestamp();
var created_at_minute = new Date(datetime.getFullYear(),
datetime.getMonth(),
datetime.getDate(),
datetime.getHours(),
datetime.getMinutes());
emit(created_at_minute, {count: 1});
}
reduce = function(key, values) {
var total = 0;
for(var i = 0; i < values.length; i++) { total += values[i].count; }
return {count: total};
}
db.so.mapReduce( map, reduce, { out: 'inline' } );
db.inline.find();
जो कुछ इस तरह आउटपुट करता है:
{ "_id" : ISODate("2013-08-05T15:24:00Z"), "value" : { "count" : 9 } }
{ "_id" : ISODate("2013-08-05T15:26:00Z"), "value" : { "count" : 2 } }
हालांकि, मेरा सुझाव है कि आप एम/आर का उपयोग न करें लेकिन इसके बजाय एकत्रीकरण ढांचे की ओर मुड़ें क्योंकि यह बहुत तेज़ है क्योंकि यह अनुक्रमणिका का उपयोग कर सकता है और समवर्ती रूप से चल सकता है। अभी, A/F के पास ObjectID
से टाइमस्टैम्प निकालने के लिए कोई ऑपरेटर नहीं है। फ़ील्ड अभी तक तो आप करेंगे सम्मिलन के समय भी समय को स्टोर करना होगा। एफ.ई. इस तरह के दस्तावेज़ों के साथ:
db.so.drop();
db.so.insert( { date: new ISODate( "2013-08-05T15:24:15" ) } );
db.so.insert( { date: new ISODate( "2013-08-05T15:24:19" ) } );
db.so.insert( { date: new ISODate( "2013-08-05T15:24:25" ) } );
db.so.insert( { date: new ISODate( "2013-08-05T15:24:32" ) } );
db.so.insert( { date: new ISODate( "2013-08-05T15:24:45" ) } );
db.so.insert( { date: new ISODate( "2013-08-05T15:25:15" ) } );
db.so.insert( { date: new ISODate( "2013-08-05T15:25:15" ) } );
db.so.aggregate( [
{ $group: {
_id: {
y: { '$year': '$date' },
m: { '$month': '$date' },
d: { '$dayOfMonth': '$date' },
h: { '$hour': '$date' },
i: { '$minute': '$date' },
},
count: { $sum : 1 }
} }
] );
कौन सा आउटपुट:
{
"result" : [
{
"_id" : {
"y" : 2013,
"m" : 8,
"d" : 5,
"h" : 15,
"i" : 25
},
"count" : 2
},
{
"_id" : {
"y" : 2013,
"m" : 8,
"d" : 5,
"h" : 15,
"i" : 24
},
"count" : 5
}
],
"ok" : 1
}