В этом официальном руководстве mongodb о том, как использовать mongodb для хранения веток обсуждений, предлагается 3 стратегии, из которых я выбрал первую: сохранение каждого комментария в своем собственном документе. В этой стратегии предлагается использовать full_slug
для многопоточных обсуждений. full_slug
состоит из slug
(который является идентификатором некоторого ресурса в CMS, например Wordpress) и даты. Таким образом, сортировка по full_slug
дает результаты, упорядоченные в иерархическом и хронологическом порядке.
Кроме того, предлагается создать 2 составных индекса для полей discussion_id
и posted
, а также для discussion_id
и full_slug
.
Поскольку запрос для получения комментариев сортируется по full_slug
, который уже содержит информацию о времени, зачем нам создавать индекс для discussion_id
и posted
?
Кроме того, если мы используем full_slug
не означает ли это, что часть slug
должна быть гарантированно последовательно увеличена? Потому что, если slug
не строго увеличен, сортировка не всегда будет правильной.