sql >> Database teknologi >  >> NoSQL >> MongoDB

pymongo-gruppe efter dato og klokkeslæt

Ja. Du kan bruge datooperatørerne med $substr og $concat at binde det hele sammen.

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

Du kan kun bruge datooperatorerne og lave et dokument som i:

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

Det fungerer lige så godt. Men dette giver dig en fin snor. Dette gør brug af det faktum, at $substr vil kaste fra heltal til streng. Hvis det nogensinde bliver tilføjet til dokumentationen.

Se på datooperatørerne dokumentation til brug på de øvrige tidsinddelinger, der kan bruges på datoer.

Endnu bedre, brug date math til at returnere en BSON-dato:

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

Her datetime.datetime.utcfromtimestamp(0) vil blive ført ind i pipelinen som en BSON-dato, der repræsenterer "epoke". Når du $subtract en BSON-dato fra en anden forskellen i millisekunder returneres. Dette giver dig mulighed for at "runde" datoen til den aktuelle dag ved igen at trække $mod resultat for at få resten af ​​millisekunders forskel fra en dag.

Det samme gælder for $add hvor "tilføjelse" af en BSON-dato til en numerisk værdi vil resultere i en BSON-dato.




  1. Pizza Tribes - Et multiplayer browser-baseret real-time strategispil

  2. MongoDB:FEJL:underordnet proces mislykkedes, afsluttet med fejlnummer 14

  3. Hvordan kører jeg en forklaringsforespørgsel med 2.4 C# Mongo-driveren?

  4. Mange-til-mange relationer i CouchDB eller MongoDB