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

group by?のmongodb集約パイプラインでミリ秒を日付に変換しますか?

    txnTimeの変換の背後にあるロジックを取得しようとしています 日付フィールドまたはミリ秒単位のタイムスタンプ(現在行っていることのように)のいずれかでグループ化すると、両方がそれぞれの形式で一意であるため、同じ結果が得られるため、フィールドを日付オブジェクトに変換します。

    txnTimeを変更するには 日付オブジェクトへのフィールドには、 $を含める必要があります。プロジェクト $group<の前のパイプライン/ code> この式を使用したパイプラインステージ

    "txnTime": {
        "$add": [ new Date(0), "$txnTime" ]
    }
    

    $ group 変換/投影されたtxnTimeフィールドの操作:

    var convertedTxnTime = { "$add": [new Date(0), "$txnTime"] };
    
    /*
      If using MongoDB 4.0 and newer, use $toDate 
    
      var convertedTxnTime = { "$toDate": "$txnTime" };
    
      or $convert
    
      var convertedTxnTime = { "$convert": { "input": "$txnTime", "to": "date" } };
    
    */
    
    db.campaign_wallet.aggregate([
        { "$match": { 
            "campaignId" : 1 , 
            "txnTime" : { 
                "$gte" : 1429554600000 , 
                "$lte" : 1430159400000
            }
        } },
        { "$group" : { 
            "_id" : {
                "txnTime": convertedTxnTime,
                "msisdn" : "$msisdn"
            }, 
            "msisdnCount" : { "$sum" : 1}
        } }
    ]);
    

    出力 :(この 質問

    /* 0 */
    {
        "result" : [ 
            {
                "_id" : {
                    "txnTime" : ISODate("2015-04-25T18:30:00.000Z"),
                    "msisdn" : "91808770101"
                },
                "msisdnCount" : 1
            }, 
            {
                "_id" : {
                    "txnTime" : ISODate("2015-04-27T05:11:54.796Z"),
                    "msisdn" : "9180877010"
                },
                "msisdnCount" : 1
            }, 
            {
                "_id" : {
                    "txnTime" : ISODate("2015-04-25T18:30:01.111Z"),
                    "msisdn" : "91808070101"
                },
                "msisdnCount" : 1
            }, 
            {
                "_id" : {
                    "txnTime" : ISODate("2015-04-25T18:30:00.000Z"),
                    "msisdn" : "91808070101"
                },
                "msisdnCount" : 2
            }, 
            {
                "_id" : {
                    "txnTime" : ISODate("2015-04-27T05:11:54.796Z"),
                    "msisdn" : "9189877000"
                },
                "msisdnCount" : 1
            }, 
            {
                "_id" : {
                    "txnTime" : ISODate("2015-04-27T05:11:54.796Z"),
                    "msisdn" : "9189877667"
                },
                "msisdnCount" : 1
            }
        ],
        "ok" : 1
    }
    

    -更新 -

    YYYY-MM-DDの形式でドキュメントを日付でグループ化するには 、 Date AggregationOperators を使用します

    例:

    var convertedTxnTime = { "$add": [new Date(0), "$txnTime"] };
    
    /*
      If using MongoDB 4.0 and newer, use $toDate 
    
      var convertedTxnTime = { "$toDate": "$txnTime" };
    
      or $convert
    
      var convertedTxnTime = { "$convert": { "input": "$txnTime", "to": "date" } };
    
    */
    
    db.campaign_wallet.aggregate([
        { "$match": { 
            "campaignId" : 1 , 
            "txnTime" : { 
                "$gte" : 1429554600000 , 
                "$lte" : 1430159400000
            }
        } },
        { "$group" : { 
            "_id" : {
                "txnTime_year" : { "$year": convertedTxnTime },
                "txnTime_month" : { "$month": convertedTxnTime },
                "txnTime_day" : { "$dayOfMonth": convertedTxnTime },
                "msisdn": "$msisdn"
            }, 
            "msisdnCount" : { "$sum" : 1}
        } }
    ]);
    

    出力

    /* 0 */
    {
        "result" : [ 
            {
                "_id" : {
                    "txnTime_year" : 2015,
                    "txnTime_month" : 4,
                    "txnTime_day" : 25,
                    "msisdn" : "91808770101"
                },
                "msisdnCount" : 1
            }, 
            {
                "_id" : {
                    "txnTime_year" : 2015,
                    "txnTime_month" : 4,
                    "txnTime_day" : 25,
                    "msisdn" : "91808070101"
                },
                "msisdnCount" : 3
            }, 
            {
                "_id" : {
                    "txnTime_year" : 2015,
                    "txnTime_month" : 4,
                    "txnTime_day" : 27,
                    "msisdn" : "9180877010"
                },
                "msisdnCount" : 1
            }, 
            {
                "_id" : {
                    "txnTime_year" : 2015,
                    "txnTime_month" : 4,
                    "txnTime_day" : 27,
                    "msisdn" : "9189877000"
                },
                "msisdnCount" : 1
            }, 
            {
                "_id" : {
                    "txnTime_year" : 2015,
                    "txnTime_month" : 4,
                    "txnTime_day" : 27,
                    "msisdn" : "9189877667"
                },
                "msisdnCount" : 1
            }
        ],
        "ok" : 1
    }
    


    1. マングースでアグリゲーションを使用しているときに存在しないフィールドにアンワインドを適用するとどうなりますか

    2. CouchDB / Couchbase / MongoDBトランザクションエミュレーション?

    3. mongoDBでhh:mmからhh:mmまでの2回のデータをフィルタリングする方法

    4. mongoDB。読み取り、oplogに基づいてタイムスタンプを検索