sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB Aggregate Time Series

Du kan sammanställa som:

  • $match dokumenten för det specifika datumet.
  • Konstruera $group och $project objekt innan du frågar.
  • $group med $hour , samla alla dokument per timme per minut i en array. Behåll minuten någonstans i dokumentet.
  • $project en variabel docs som $setUnion av alla dokument per timme.
  • $unwind dokumenten.
  • $sort genom orders
  • $limit de översta 10 dokument vilket är vad vi behöver.

Kod:

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"}}
])



  1. Använda $in i MongooseJS med kapslade objekt

  2. Hur man gör en komplex fråga MongoDB med Powershell

  3. Node.js lyssnar på MongoDB change

  4. Hur man hittar dokument och enstaka underdokument som matchar givna kriterier i MongoDB-samlingen