sql >> Database >  >> NoSQL >> MongoDB

pymongo groeperen op datum/tijd

Ja. U kunt de Date Operators gebruiken met $substr en $concat om het allemaal samen te binden.

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

U kunt alleen de datumoperators gebruiken en een document maken zoals in:

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

Dat werkt net zo goed. Maar dit geeft je een mooie string. Dit maakt gebruik van het feit dat $substr zal casten van integer naar string. Als dat ooit aan de documentatie wordt toegevoegd.

Kijk naar de Datumoperators documentatie voor gebruik op de andere tijdsindelingen die op datums kunnen worden gebruikt.

Beter nog, gebruik datumberekening om een ​​BSON-datum te retourneren:

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

Hier datetime.datetime.utcfromtimestamp(0) zal in de pijplijn worden ingevoerd als een BSON-datum die "tijdperk" vertegenwoordigt. Wanneer u $subtract de ene BSON-datum van de andere het verschil in milliseconden wordt geretourneerd. Hiermee kunt u de datum "afronden" naar de huidige dag door opnieuw de $mod resultaat om de resterende milliseconden verschil van een dag te krijgen.

Hetzelfde geldt voor $add waarbij het "toevoegen" van een BSON-datum aan een numerieke waarde resulteert in een BSON-datum.




  1. Projecteren van resultaten van MongoDb Zoeken in F#

  2. Herstel redis-gegevens van slave naar master

  3. MongoDb C# getypte aggregaties met Group Unwind en Project

  4. Wanneer gebruik je GridFS op MongoDB?