Я хочу создать новые массивы из данного массива на основе результатов агрегации, желаемый результат из следующего документа - разделить массив на новые массивы, где точкой разделения является действие "start"
{
"_id" : "5f851b06b08ab4b1f916c14841d4bbba",
"actions" : [
{
"action" : "start",
"datetime" : 1525692527345.0
},
{
"action" : "scrolled",
"datetime" : 1525692545966.0
},
{
"action" : "scrolled",
"datetime" : 1525692545983.0
},
{
"action" : "click",
"datetime" : 1525692545999.0
},
{
"action" : "start",
"datetime" : 1525693343877.0
},
{
"action" : "mousemove",
"datetime" : 1525693351075.0
},
{
"action" : "mousemove",
"datetime" : 1525693351117.0
},
{
"action" : "scrolled",
"datetime" : 1525693351212.0
},
{
"action": "scrolled",
"datetime": 1525693354026.0
},
{
"action": "scrolled",
"datetime": 1525693354126.0
}
]
}
так что теперь у меня должен быть документ, который выглядит следующим образом:
{
"_id": "5f851b06b08ab4b1f916c14841d4bbba",
"session1": [
{
"action": "start",
"datetime": 1525692527345.0
},
{
"action": "scrolled",
"datetime": 1525692545966.0
},
{
"action": "scrolled",
"datetime": 1525692545983.0
},
{
"action": "click",
"datetime": 1525692545999.0
}
],
"session2": [
{
"action": "start",
"datetime": 1525693343877.0
},
{
"action": "mousemove",
"datetime": 1525693351075.0
},
{
"action": "mousemove",
"datetime": 1525693351118.0
},
{
"action": "mousemove",
"datetime": 1525693351119.0
},
{
"action": "mousemove",
"datetime": 1525693351121.0
},
{
"action": "scrolled",
"datetime": 1525693351212.0
},
{
"action": "scrolled",
"datetime": 1525693354026.0
},
{
"action": "scrolled",
"datetime": 1525693354126.0
}
]
}
имя поля session1
, session2
может быть любым, просто для того, чтобы показать желаемый результат.
есть идеи, как добавить это в мой существующий конвейер агрегации?
db.collection.aggregate(
[
{
"$match" : {
"action" : {
"$exists" : true
},
"domain" : "domain.com"
}
},
{
"$unwind" : "$action"
},
{
"$sort" : {
"action.datetime" : 1.0
}
},
{
"$group" : {
"_id" : "$id",
"count" : {
"$sum" : 1.0
},
"actions" : {
"$addToSet" : {
"id" : "$id",
"action" : "$action.action",
"datetime" : "$action.datetime"
}
}
}
},
{
"$unwind" : "$actions"
},
{
"$sort" : {
"actions.datetime" : 1.0
}
},
{
"$group" : {
"_id" : "$actions.id",
"count" : {
"$sum" : 1.0
},
"actions" : {
"$push" : {
"action" : "$actions.action",
"datetime" : "$actions.datetime"
}
}
}
},
{
"$match" : {
"count" : {
"$gt" : 1.0
}
}
}
],
{
"allowDiskUse" : true
}
);
Спасибо за внимание!