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

група pymongo по дата и час

да Можете да използвате операторите за дата с $substr и $concat за да свържа всичко заедно.

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

Можете да използвате само операторите за дата и да направите документ като в:

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

Това работи също толкова добре. Но това ви дава хубав низ. Това използва факта, че $substr ще прехвърли от цяло число към низ. Ако това някога бъде добавено към документацията.

Погледнете операторите за дата документация за използване на други времеви разделения, които могат да се използват за дати.

Още по-добре използвайте математика за дата, за да върнете 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 } }
])

Тук datetime.datetime.utcfromtimestamp(0) ще бъде подаден в тръбопровода като BSON дата, представляваща "епоха". Когато $subtract една BSON дата от друга се връща разликата в милисекунди. Това ви позволява да „закръглите“ датата до текущия ден, като отново извадите $mod резултат, за да получите остатъка от милисекунди разлика от ден.

Същото важи и за $add където "добавянето" на BSON дата към числова стойност ще доведе до BSON дата.




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

  2. Как да преброим продуктовата група с име на поле в Monogodb?

  3. Заявка в MongoDB Map Reduce Function

  4. От mat-select запазване на данни в база данни MongoDB

  5. как да използвам mapreduce в поддокумент на заявка mongoose/mongodb?