sql >> データベース >  >> NoSQL >> MongoDB

Mongodb、datediffによるグループ化と時間の取得

    あなたの質問で私が理解したことから(あなたは実際にあなたのスキーマでサンプルのいくつかの文書を提供する必要があります)あなたのTraitement たとえば、モデルの構造は次のとおりです。

    /* 0 */
    {
        "_id" : 1,
        "user" : "abc",
        "dateEntre" : ISODate("2014-03-01T08:00:00.000Z"),
        "dateSortie" : ISODate("2014-03-01T13:00:00.000Z")
    }
    
    /* 1 */
    {
        "_id" : 2,
        "user" : "jkl",
        "dateEntre" : ISODate("2014-03-01T08:00:00.000Z"),
        "dateSortie" : ISODate("2014-03-01T10:30:00.000Z")
    }
    /* 2 */
    {
        "_id" : 3,
        "user" : "jkl",
        "dateEntre" : ISODate("2014-03-01T12:00:00.000Z"),
        "dateSortie" : ISODate("2014-03-01T18:00:00.000Z")
    }
    

    集約フレームワークには、単一の $projectがあります $subtractを使用して2つの日付の差を取得するパイプライン操作 演算子を入力し、 $divideを使用して、その日付の差をミリ秒単位から時間単位に変換します オペレーター。パイプラインの最後の段階は、 $groupを使用することです。 前のパイプラインと$sumからのドキュメントをグループ化する演算子 日付差の時間:

    Traitement.aggregate([ 
        { 
            $project: { 
                user: 1,             
                dateDifference: { 
                    $divide: [{ 
                        $subtract: [ "$dateSortie", "$dateEntre" ]
                        }, 1000*60*60
                    ] 
                }
             }
        },
        { 
            $group: { 
                _id: "$user",             
                total : { 
                    $sum : "$dateDifference"
                }
            }
        } 
    ])
    

    結果:

    /* 0 */
    {
        "result" : [ 
            {
                "_id" : "jkl",
                "total" : 8.5
            }, 
            {
                "_id" : "abc",
                "total" : 5
            }
        ],
        "ok" : 1
    }
    



    1. toGMTstring()とtoUTCstring()の違いは何ですか?

    2. Mongoは、単一のクエリで一致するドキュメントフィールドを一括検索して更新しますか?

    3. 多数のドキュメント用のシャーディングキー(MongoDB)

    4. pyarrowを使用してPandasデータフレームをRedisに設定/取得する方法