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

групирайте по дати в mongodb

Нов отговор, използващ рамката за агрегиране на Mongo

След като този въпрос беше зададен и отговорен, 10gen пусна Mongodb версия 2.2 с рамка за агрегиране, която сега е по-добрият начин за извършване на този вид заявка. Тази заявка е малко предизвикателна, защото искате да групирате по дата и съхранените стойности са времеви печати, така че трябва да направите нещо, за да преобразувате времевите отпечатъци в дати, които съвпадат. За целите на примера просто ще напиша заявка, която получава правилния брой.

db.col.aggregate(
   { $group: { _id: { $dayOfYear: "$date"},
               click: { $sum: 1 } } }
   )

Това ще върне нещо като:

[
    {
        "_id" : 144,
        "click" : 165
    },
    {
        "_id" : 275,
        "click" : 12
    }
]

Трябва да използвате $match за да ограничите заявката до периода от време, който ви интересува и $project за преименуване на _id до date . Как преобразувате деня от годината обратно в дата е оставено като упражнение за читателя. :-)

10gen има удобна диаграма за преобразуване на SQL към Mongo Aggregation, която си струва да направите отметка. Има и конкретна статия за операторите за агрегиране на дати.

Ако станете малко по-привлекателни, можете да използвате:

db.col.aggregate([
  { $group: {
      _id: {
        $add: [
         { $dayOfYear: "$date"}, 
         { $multiply: 
           [400, {$year: "$date"}]
         }
      ]},   
      click: { $sum: 1 },
      first: {$min: "$date"}
    }
  },
  { $sort: {_id: -1} },
  { $limit: 15 },
  { $project: { date: "$first", click: 1, _id: 0} }
])

което ще ви осигури последните 15 дни и ще върне някаква дата и час в рамките на всеки ден в date поле. Например:

[
    {
        "click" : 431,
        "date" : ISODate("2013-05-11T02:33:45.526Z")
    },
    {
        "click" : 702,
        "date" : ISODate("2013-05-08T02:11:00.503Z")
    },
            ...
    {
        "click" : 814,
        "date" : ISODate("2013-04-25T00:41:45.046Z")
    }
]


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да намерите заявки, които не използват индекси или са бавни в mongodb

  2. Mongo, намерете чрез списък с идентификатори

  3. Каква е разликата между Spring Data MongoDB и Hibernate OGM за MongoDB?

  4. Съхранение на файл в MongoDB с помощта на Multer в Mongoose

  5. mongod --bind_ip с помощта на docker-compose версия 2