MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDb агрегиране Групиране по дата

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

Групирането по дата може да се извърши на две стъпки в рамката за агрегиране, необходима е допълнителна трета стъпка за сортиране на резултата, ако се желае сортиране:

  1. $project в комбинация с $substr взема първите 10 знака (ГГГГ:ММ:ДД) от обекта ISODate от всеки документ (резултатът е колекция от документи с полета "_id" и "day");
  2. $group групи по дни, добавяне (сумиране) на числото 1 за всеки съответстващ документ;
  3. $sort възходящо по "_id", който е денят от предишната стъпка на агрегиране - това не е задължително, ако се желае сортиран резултат.

Това решение не може да се възползва от индекси като db.twitter.ensureIndex( { TimeStamp: 1 } ) , защото преобразува ISODate обекта в низов обект в движение. За големи колекции (милиони документи) това може да е пречка за производителността и трябва да се използват по-сложни подходи.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $replaceOne

  2. Как да създам първия потребител на mongodb с разрешено оторизиране?

  3. Използване на UUID вместо ObjectID в MongoDB

  4. MongoDB:Твърде много позиционни (т.е. „$“) елементи, открити в пътя

  5. Получаване на вложени данни от MongoDB в рамка с данни на Pandas