आप इसे इस तरह एकत्रीकरण के साथ कर सकते हैं:
db.user.aggregate([
{
$match:{
$and:[
{
timestamp:{
$gte: ISODate("2016-10-12T00:00:00.000Z")
}
},
{
timestamp:{
$lt: ISODate("2016-10-13T00:00:00.000Z")
}
}
]
}
},
{
$group:{
_id:"$userId",
timestamp:{
$first:"$timestamp"
},
send_message:{
$sum:{
$cond:[
{
$eq:[
"$event_type",
"send_message"
]
},
1,
0
]
}
},
clicked_cancel:{
$sum:{
$cond:[
{
$eq:[
"$event_type",
"clicked_cancel"
]
},
1,
0
]
}
},
clicked_ok:{
$sum:{
$cond:[
{
$eq:[
"$event_type",
"clicked_ok"
]
},
1,
0
]
}
}
}
},
{
$project:{
date:{
$dateToString:{
format:"%Y-%m-%d",
date:"$timestamp"
}
},
userId:1,
clicked_cancel:1,
send_message:1,
clicked_ok:1
}
}
])
व्याख्या:
$मिलान . में केवल एक विशिष्ट दिन के लिए दस्तावेज़ रखें मंच
userId द्वारा समूह दस्तावेज़ और $group . में प्रत्येक घटना के लिए घटनाओं की गणना करें मंच
अंत में टाइमस्टैम्प फ़ील्ड को yyyy_MM-dd . में प्रारूपित करें $प्रोजेक्ट . में प्रारूपित करें मंच
आपके द्वारा प्रदान किए गए डेटा के लिए, यह आउटपुट होगा
{
"_id":"123123123",
"send_message":0,
"clicked_cancel":1,
"clicked_ok":1,
"date":"2016-10-12"
}