आप इस प्रकार एकत्र कर सकते हैं:
$match
विशिष्ट तिथि के लिए दस्तावेज़।$group
का निर्माण करें और$project
क्वेरी करने से पहले ऑब्जेक्ट।$group
$hour
. द्वारा , सभी दस्तावेज़ प्रति घंटे प्रति मिनट एक सरणी में जमा करें। मिनट को दस्तावेज़ के भीतर कहीं रखें।$project
$setUnion
. के रूप में एक चर दस्तावेज़ प्रति घंटे सभी दस्तावेजों में से।$unwind
दस्तावेज़।$sort
orders
. द्वारा$limit
शीर्ष10
दस्तावेज़ जिनकी हमें आवश्यकता है।
कोड:
var inputDate = new ISODate("2015-01-09T13:00:00Z");
var group = {};
var set = [];
for(var i=0;i<=60;i++){
group[i] = {$push:{"doc":"$vals."+i,
"hour":"$_id.hour",
"min":{$literal:i}}};
set.push("$"+i);
}
group["_id"] = {$hour:"$hour"};
var project = {"docs":{$setUnion:set}}
db.t.aggregate([
{$match:{"hour":{$lte:inputDate,$gte:inputDate}}},
{$group:group},
{$project:project},
{$unwind:"$docs"},
{$sort:{"docs.doc.orders":-1}},
{$limit:2},
{$project:{"_id":0,
"hour":"$_id",
"doc":"$docs.doc",
"min":"$docs.min"}}
])