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

Agregace MongoDb Seskupit podle data

db.foos.aggregate(
    [   
        {   $project : { day : {$substr: ["$TimeStamp", 0, 10] }}},        
        {   $group   : { _id : "$day",  number : { $sum : 1 }}},
        {   $sort    : { _id : 1 }}        
    ]
)

Seskupit podle data lze v rámci agregace provést ve dvou krocích, další třetí krok je nutný pro seřazení výsledku, pokud je řazení požadováno:

  1. $project v kombinaci s $substr vezme prvních 10 znaků (RRRR:MM:DD) objektu ISODate z každého dokumentu (výsledkem je kolekce dokumentů s poli „_id“ a „den“);
  2. $group skupiny podle dne, přidáním (sečtením) čísla 1 pro každý odpovídající dokument;
  3. $sort vzestupně podle „_id“, což je den od předchozího kroku agregace – toto je volitelné, pokud požadujete seřazený výsledek.

Toto řešení nemůže využívat indexy jako db.twitter.ensureIndex( { TimeStamp: 1 } ) , protože transformuje objekt ISODate na objekt typu string za běhu. U velkých sbírek (milionů dokumentů) by to mohlo představovat překážku výkonu a měly by být použity sofistikovanější přístupy.



  1. Dotaz na Mongodb na měsíc, den, rok... data a času

  2. Jedinečný index v mongoDB 3.2 ignorující hodnoty null

  3. Dokument Čtení a vkládání se zamykáním/transakcí v nodejs s mongodb

  4. Jak vytvořit tabulkový kurzor v prostředí MongoDB?