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 結果は、1日からの残りのミリ秒の差を取得します。

    $addについても同じことが言えます。 ここで、BSON日付を数値に「追加」すると、BSON日付になります。




    1. ObjectIdへのMongoDB集約プロジェクト文字列

    2. DOSまたはWindowsからのMongoDBコマンド

    3. mongodbのSQLビュー

    4. 公式のC#ドライバーを使用して、mongoDBでSQLLike演算子をどのように実行しますか