2015-04-27 9 views
5

muszę konwertować milisekund formatu daty w MongoDB agregacji pipiline -Konwertuj milisekundy do tej pory w potoku agregacji mongodów dla grupy według?

Moje zapytanie jest -

db.campaign_wallet.aggregate({"$match" : {"campaignId" : 1, "txnTime" : { "$gte" : 1429554600000, "$lte" : 1430159400000}}}, {"$group" : {"_id" : {"msisdn" : "$msisdn", "txnTime" : "$txnTime"}, "count" : {"$sum": 1}}}); 

W tym zapytaniu Jak przekonwertować txnTime (który jest w milisekundach) na bieżąco w rurociągu?

+1

możliwe duplikat [? Jak przekonwertować milisekundy do tej pory w agregacji MongoDB] (http://stackoverflow.com/questions/29889719/how-to-convert-miliseconds-to-date- in-mongodb-aggregation) – chridam

+0

@chridam Jest to nowe pytanie i muszę przeliczyć milisekundy do chwili obecnej w fazie ... czy możesz to rozwiązać? –

+1

@AmitDas Proszę wpisać aktualny tekst zapytania zamiast zrzutu ekranu. – ZeMoon

Odpowiedz

9

Próbuję uzyskać logikę konwersji pola txnTime na obiekt daty, ponieważ grupowanie według pola daty lub znacznika czasu w milisekundach (jak to, co obecnie robisz) przyniesie taki sam wynik, ponieważ oba są unikalny w swoich formatach!

Aby zmienić pole txnTime do obiektu data należy następnie zawierać $project rurociągu przed etapem $group rurociągu z tego wyrażenia

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

, aby można było wykonać operację $group na przekonwertowany/prognozowanych pole txnTime :

db.campaign_wallet.aggregate([ 
    { 
     "$match": { 
      "campaignId" : 1 , 
      "txnTime" : { 
       "$gte" : 1429554600000 , 
       "$lte" : 1430159400000 
      } 
     } 
    }, 
    { 
     "$project": { 
      "txnTime": { 
       "$add": [ new Date(0), "$txnTime" ] 
      }, 
      "msisdn": 1 
     } 
    }, 
    { 
     "$group" : { 
      "_id" : { 
       "txnTime" : "$txnTime", 
       "msisdn":"$msisdn" 
      }, 
      "msisdnCount" : { "$sum" : 1} 
     } 
    } 
]); 

Wyjście: (na podstawie wzorów dokumentów z tym question)

/* 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 
} 

- UPDATE -

grupowania dokumenty według daty z formatem YYYY-MM-DD użyj Date Aggregation Operators

Przykład:

db.campaign_wallet.aggregate([ 
    { 
     "$match": { 
      "campaignId" : 1 , 
      "txnTime" : { 
       "$gte" : 1429554600000 , 
       "$lte" : 1430159400000 
      } 
     } 
    }, 
    { 
     "$project": { 
      "txnTime": { 
       "$add": [ new Date(0), "$txnTime" ] 
      }, 
      "msisdn": 1 
     } 
    }, 
    { 
     "$project": 
     { 
      "year": { "$year": "$txnTime" }, 
      "month": { "$month": "$txnTime" }, 
      "day": { "$dayOfMonth": "$txnTime" }, 
      "msisdn": 1, 
      "txnTime": 1 
     } 
    }, 
    { 
     "$group" : { 
      "_id" : { 
       "txnTime_year" : "$year", 
       "txnTime_month" : "$month", 
       "txnTime_day" : "$day", 
       "msisdn": "$msisdn" 
      }, 
      "msisdnCount" : { "$sum" : 1} 
     } 
    } 
]); 

Wyjście:

/* 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 
} 
+0

to prawie prawda .... ale msisdn = "91808070101" było na tym samym dniu .... więc jego pozycja w związku powinno być tak - { "_id": { "txnTime": ISODate ("25.4.2015") "MSISDN": "91808070101" } "msisdnCount" : 3 }, –

+0

msisdn feild również powinno być unikalne. –

+0

@AmitDas Zaktualizowałem odpowiedź na ten efekt. Byłoby wspaniale, gdybyś mógł bardziej rozwinąć się w swoich pytaniach, być konkretnym z celami, ponieważ nie mogłem naprawdę zrozumieć tego, co chciałeś w pierwszej kolejności. W końcu zrozumiałem, że chcesz zgrupować dokumenty według daty w formacie 'RRRR-MM-DD', o czym wspomniałeś w swoich komentarzach. – chridam