sql >> Base de Datos >  >> NoSQL >> MongoDB

Grupo de agregación de MongoDb por fecha

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

Agrupar por fecha se puede hacer en dos pasos en el marco de agregación, se necesita un tercer paso adicional para ordenar el resultado, si se desea ordenar:

  1. $project en combinación con $substr toma los primeros 10 caracteres (AAAA:MM:DD) del objeto ISODate de cada documento (el resultado es una colección de documentos con los campos "_id" y "día");
  2. $group agrupa por día, sumando (sumando) el número 1 para cada documento coincidente;
  3. $sort ascendente por "_id", que es el día desde el paso de agregación anterior; esto es opcional si se desea un resultado ordenado.

Esta solución no puede aprovechar índices como db.twitter.ensureIndex( { TimeStamp: 1 } ) , porque transforma el objeto ISODate en un objeto de cadena sobre la marcha. Para colecciones grandes (millones de documentos), esto podría ser un cuello de botella en el rendimiento y se deben utilizar enfoques más sofisticados.