Причина, по которой такой подход неэффективен, заключается в том, что вы действительно разработали свою базу данных, чтобы сделать этот процесс неэффективным.
Вы собрали коллекцию "tags" как родитель для коллекции "comments". Но затем вы говорите, что хотите загрузить «комментарии» по «тегу».
Обычно в тегах "комментарии" или "продукты" тег " принадлежит " комментарию "или" продукту ". Но вы изменили это, вы ссылаетесь на комментарии из тегов вместо того, чтобы искать комментарий по тегу.
Я думаю, что вы ищете что-то вроде этого.
- Товар содержит комментарии
- Товар может быть помечен
- Комментарий может быть помечен
- Все теги имеют оценку
Вот как выглядит эта структура данных:
product := {
name: str,
group: ref,
tags: [ {ref, score}, {ref, score},... ]
comments: [ { ref, tags: [ {ref, score}, {ref, score},... ] },
{ ref, tags: [ {ref, score}, {ref, score},... ] }, ...
]
}
Если вы хотите сделать еще один шаг вперед, вы даже можете полностью удалить коллекцию «комментариев». Комментарии без продукта, вероятно, ничего не значат. Таким образом, вы можете создать весь объект «Комментарий» внутри «объекта» Продукта.
С точки зрения «индексации» вы можете индексировать в массивах. Таким образом, вы можете настроить индекс для product.tags и product.comments.tags.
Теперь ваш запрос намного проще. Вы можете буквально просто взять Product, а затем перебрать массив Comments в поисках подходящего тега. Или вы можете выполнить запрос на стороне сервера и заставить его упорядочить теги по баллам.