sql >> Databáze >  >> NoSQL >> MongoDB

Agregátní časové řady MongoDB

Můžete agregovat jako:

  • $match dokumenty pro konkrétní datum.
  • Sestavte $group a $project objektů před dotazem.
  • $group do $hour , shromáždí všechny dokumenty za hodinu za minutu v poli. Minutu ponechte někde v dokumentu.
  • $project proměnná docs jako $setUnion všech dokumentů za hodinu.
  • $unwind dokumenty.
  • $sort podle orders
  • $limit horních 10 dokumenty, které požadujeme.

Kód:

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. Jak mohu filtrovat, abych vrátil podmnožinu schématu mongoose?

  2. Redis pomalu získává velké struny

  3. MongoDB:Měli byste stále poskytovat ID odkazující na jiné sbírky nebo je pouze zahrnout?

  4. Poskytovatel ASP.NET SessionState podporovaný Redis