MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Agregação MongoDb Agrupar por data

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

Agrupar por data pode ser feito em duas etapas na estrutura de agregação, uma terceira etapa adicional é necessária para classificar o resultado, se a classificação for desejada:
  1. $project em combinação com $substr pega os primeiros 10 caracteres (AAAA:MM:DD) do objeto ISODate de cada documento (o resultado é uma coleção de documentos com os campos "_id" e "day");
  2. $group agrupa por dia, somando (somando) o número 1 para cada documento correspondente;
  3. $sort ascendente por "_id", que é o dia da etapa de agregação anterior - isso é opcional se o resultado classificado for desejado.

Esta solução não pode tirar proveito de índices como db.twitter.ensureIndex( { TimeStamp: 1 } ) , porque transforma o objeto ISODate em um objeto de string dinamicamente. Para grandes coleções (milhões de documentos), isso pode ser um gargalo de desempenho e abordagens mais sofisticadas devem ser usadas.