MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

grupuj według dat w mongodb

Nowa odpowiedź przy użyciu frameworka agregacji Mongo

Po tym, jak zadano to pytanie i udzielono na nie odpowiedzi, 10gen wypuścił Mongodb w wersji 2.2 ze strukturą agregacji, która jest teraz lepszym sposobem na wykonywanie tego rodzaju zapytań. To zapytanie jest trochę trudne, ponieważ chcesz pogrupować według dat, a przechowywane wartości są sygnaturami czasowymi, więc musisz coś zrobić, aby przekonwertować sygnatury czasowe na daty pasujące. Na potrzeby przykładu napiszę zapytanie, które otrzyma właściwe liczby.

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

To zwróci coś takiego:

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

Musisz użyć $match aby ograniczyć zapytanie do zakresu dat, który Cię interesuje i $project zmienić nazwę _id do date . Jak przekonwertować dzień roku wstecz na datę, pozostaje ćwiczeniem dla czytelnika. :-)

10gen ma przydatną tabelę konwersji SQL do Mongo Aggregation, którą warto dodać do zakładek. Istnieje również specjalny artykuł na temat operatorów agregacji dat.

Stając się trochę bardziej wyrafinowanym, możesz użyć:

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} }
])

który da ci ostatnie 15 dni i zwróci pewną datę i godzinę w ciągu każdego dnia w date pole. Na przykład:

[
    {
        "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. Jak uniknąć ostrzeżenia transparent_hugepage/defrag z mongodb?

  2. MongoDB $toString

  3. Networkx nigdy nie kończy obliczania centralności między dwoma milionami węzłów

  4. Automatyczna sekwencja inkrementacji w mongodb przy użyciu java

  5. Mongoose znajdź/zaktualizuj poddokument