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
}
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
@chridam Jest to nowe pytanie i muszę przeliczyć milisekundy do chwili obecnej w fazie ... czy możesz to rozwiązać? –
@AmitDas Proszę wpisać aktualny tekst zapytania zamiast zrzutu ekranu. – ZeMoon