Контекст:
Мы используем Монго для сохранения информации сеанса на пользователей, посещающих сайты наших клиентов. Большинство из них - это просто метаданные сеанса (время начала, браузер, ОС, страна и т. Д.).MongoDB: запрашивая массивов для конкретного элемента последовательности
Одним из таких полей является незаметный массив «страниц». Которая состоит из последовательности веб-сайтов, заказанных при их посещении пользователем. Достаточно просто. Однако теперь мы оказываемся в неотложной необходимости фильтровать их по порядку, который они встречают в массиве относительно КАЖДОГО ДРУГОГО, а не просто в том случае, если они встречаются в массиве.
Пример:
Рассмотрим следующие страницы массив:
[ "A", "B", "C", "D", "E", "F", "G", "H" ]
Есть ли способ в MongoDB для запроса скажем: «извлекать каждый документ из db.sessions.pages где B следуют непосредственно с и D. следуют прямо или косвенно G и вся последовательность заканчивается H
Повторим - этот пример должен передать запрос выше, а также:?
[ "D", "A", "B", "A", "B", "C", "H" ]
Принимая во внимание, что у нас есть сотни тысяч документов на клиента ... Является ли эффект, который мы хотим достичь возможным? Я понимаю, что если это так - это, вероятно, потребует некоторой формы агрегации. Или мы просто полностью стреляли в ногу, выбирая Монго?
Что вы имеете в виду * D следует прямо или косвенно G *? Какова ваша версия MongoDB? – styvane
Мы используем Mongo 3.2 на производстве. «Прямая»/«косвенная» функциональность была бы неплохо иметь, но это не обязательно для нашего сценария. Под «элементом B, за которым сразу следует элемент G», я имею в виду, что в массиве, представляющем последовательность веб-сайтов, существует, по меньшей мере, одна такая подпоследовательность, что если B находится в n-й позиции, то G находится на n + 1 , Под «элементом B, косвенно сопровождаемым элементом G», я имею в виду, что существует хотя бы одна такая подпоследовательность, что если B находится в n-й позиции, то G находится на n + k. Опять же, эта специфическая функциональность не имеет решающего значения, все остальное есть;) – Zardii