#mongodb #mongodb-query #aggregation-framework
#mongodb #mongodb-запрос #aggregation-framework
Вопрос:
Я пишу конвейер агрегации с MongoDB. Конвейер состоит из нескольких этапов, таких как сопоставление, затем проект, группировка, сопоставление и сортировка.
На этом этапе конвейера у меня есть данные вида:
name : "Bob"
values : [{date: ISODate("2014-01-01T00:00:00Z"), count: 12},
{date: ISODate("2014-01-04T00:00:00Z"), count: 50},
{date: ISODate("2014-02-15T00:00:00Z"), count: 8},
]
Пожалуйста, обратите внимание, что поля даты отсортированы.
Вопрос в том, как в рамках агрегации MongoDB вычислить значение счетчика относительно предыдущего значения в отсортированном массиве (ключом группы является «имя»).).
Я хотел бы преобразовать приведенный выше документ, чтобы вычислить относительные значения:
name : "Bob"
values : [{date: ISODate("2014-01-01T00:00:00Z"), count: 12}, // 12 = 12 - 0
{date: ISODate("2014-01-04T00:00:00Z"), count: 38}, // 38 = 50 - 12
{date: ISODate("2014-02-15T00:00:00Z"), count: -30},// -30 = 8 - 38
]
Цель состоит в том, чтобы затем развернуть массив и сгруппировать по дате.
Я знаю, что это можно сделать с помощью map-reduce, но я бы предпочел сделать это в рамках aggregation framework.
Заранее спасибо!
Комментарии:
1. Нет, это невозможно с помощью платформы агрегации. Вы уже заявили, что знаете, что это возможно с помощью MapReduce, и это потому, что вы можете использовать переменную «scope» как «глобальную», на которую можно ссылаться на разных этапах. Это недоступно для платформы агрегации. Не стесняйтесь отправлять JIRA с запросом «globals»
2. Актуальной проблемой Jira для просмотра / обсуждения является SERVER-4437: поддержка оконной работы на конвейерах .