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

pymongo grupuj według daty i godziny

TAk. Możesz użyć operatorów daty z $substr i $concat powiązać to wszystko razem.

db.test.aggregate([
    {"$group": {
        "_id" : { "$concat": [
            {"$substr": [{"$year": "$date"}, 0, 4 ]},
            "-",
            {"$substr": [{"$month": "$date"}, 0, 2 ]},
            "-",
            {"$substr": [{"$dayOfMonth": "$date"}, 0, 2 ]},
        ]},
        "count": {"$sum": 1 }
     }},
     {"$sort": { "_id": 1 }}
])

Możesz użyć tylko operatorów daty i utworzyć dokument, jak w:

"day": { 
    "year": {"$year": "$date" },
   "month": {"$month": "$date"}, 
   "day": {"$dayOfYear": "$date"}
}

To działa równie dobrze. Ale to daje niezły ciąg. Wykorzystuje to fakt, że $substr będzie rzutować z liczby całkowitej na łańcuch. Jeśli kiedykolwiek zostanie dodany do dokumentacji.

Spójrz na Operatory daty dokumentacja do wykorzystania w innych przedziałach czasowych, które mogą być używane w datach.

Jeszcze lepiej, użyj matematyki dat, aby zwrócić datę BSON:

import datetime

db.test.aggregate([
    { "$group": {
        "_id": {
            "$add": [
               { "$subtract": [
                   { "$subtract": [ "$date", datetime.datetime.utcfromtimestamp(0) ] },
                   { "$mod": [
                       { "$subtract": [ "$date", datetime.datetime.utcfromtimestamp(0) ] },
                       1000 * 60 * 60 * 24
                   ]}
               ]},
               datetime.datetime.utcfromtimestamp(0)
           ]
        },
        "count": { "$sum": 1 }
    }},
    { "$sort": { "_id": 1 } }
])

Tutaj datetime.datetime.utcfromtimestamp(0) zostanie wprowadzony do rurociągu jako Data BSON reprezentująca „epokę”. Gdy $subtract jedna data BSON od drugiej zwracana jest różnica w milisekundach. Pozwala to na „zaokrąglenie” daty do bieżącego dnia przez ponowne odjęcie $mod wynik, aby uzyskać resztę milisekund różnicy z dnia.

To samo dotyczy $add gdzie „dodanie” daty BSON do wartości liczbowej spowoduje powstanie daty BSON.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $przełącznik

  2. Duże przepływy danych przy użyciu pand

  3. Usuwanie dużych obiektów JavaScript, gdy procesowi zabraknie pamięci

  4. jak tworzyć dynamiczne klucze dokumentów w mongodb

  5. Jak grupować według wielu pól w MongoDB, gdy jedno jest polem daty?