У меня есть документы с массивом объектов событий:
{
"events": [
{
"name": "A"
},
{
"name": "C"
},
{
"name": "D"
},
{
"name": "B"
},
{
"name": "E"
}
]
},
{
"events": [
{
"name": "A"
},
{
"name": "B"
},
{
"name": "S"
},
{
"name": "C"
}
]
}
]
В этом массиве я хочу подсчитать количество событий, которые находятся в указанном порядке, с промежуточными событиями. Например, я ищу порядок [A, B, C] с массивом [A, x, x, B, x], я должен считать 2, с [A, B, x, x, C] я должен иметь 3. (x - это просто заполнитель для всего остального)
Я хочу суммировать эту информацию для всех моих документов в форме массива с количеством совпадений для каждого элемента. В предыдущем примере, который дал бы мне [2,2,1], 2 совпадения для A, 2 совпадения для B, 1 совпадение для C.
Моя текущая агрегация создается в javascript и следуйте этот шаблон:
- Сопоставьте документы с массивом событий, содержащим A
- Разделите массив от A до конца массива
- Подсчитайте количество документов
- Добавить количество совпадающих документов к суммирующему массиву
- Сопоставить документы с массивом событий, содержащим B
- Нарезать массив от B до конца массива
- Подсчитать количество документов
- et c
Однако, когда событие не появляется ни в одном из массивов, оно падает, так как документов нет, я нет возможности хранить суммирующий массив. Например, с массивом событий [A, x, x, B, x] [A, B, x, x, C] и попыткой сопоставить [A, B, D] я ожидал бы [2,2,0 ], но у меня есть [], так как при попытке сопоставить D ничего не появляется, и агрегирование не может продолжаться.
Вот агрегирование, с которым я работаю: https://mongoplayground.net/p/rEdQD4FbyC4 измените сопоставление буквы l.75 с чем-то не в массиве, чтобы иметь c поведение.
Итак, есть ли способ не потерять мои данные, если совпадений нет? вроде обхода этапов агрегации, я не смог найти ничего, связанного с обходом этапов в документации mongoDB.
Или вам известен другой способ сделать это?