sql >> Databáze >  >> NoSQL >> MongoDB

skupina pymongo podle data a času

Ano. Můžete použít Operátory data s $substr a $concat abychom to všechno spojili.

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

Můžete použít pouze operátory data a vytvořit dokument jako v:

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

To funguje stejně dobře. Ale tohle vám dává pěknou strunu. To využívá skutečnosti, že $substr přetypuje z celého čísla na řetězec. Pokud to někdy bude přidáno do dokumentace.

Podívejte se na Date Operators dokumentaci pro použití na jiných časových děleních, která lze použít v datech.

Ještě lépe, použijte matematickou matematiku pro vrácení BSON Date:

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

Zde datetime.datetime.utcfromtimestamp(0) bude přiváděno do potrubí jako datum BSON představující „epochu“. Když $subtract jeden BSON Date od druhého je vrácen rozdíl v milisekundách. To vám umožní „zaokrouhlit“ datum na aktuální den opětovným odečtením $mod výsledek, abyste získali zbývající milisekundový rozdíl oproti dni.

Totéž platí pro $add kde "přidáním" data BSON k číselné hodnotě bude výsledkem datum BSON.




  1. Používáte Redis k implementaci přihlášení?

  2. MongoDB Výpočet hodnot ze dvou polí, řazení a omezení

  3. Pokud klíč neexistuje Mongoose, vložte hodnotu do pole

  4. Nelze načíst hodnotu _id pomocí mgo s golang