Задать вопрос

Как правильно ориганизовать комментарии при использовании Mongo DB?

Необходимо создать систему комментариев некоторых материалов. Читал рекомендации что лучше хранить все комментарии в одном документе, тут проблем нет. Но кроме самих комментариев ещё необходимы ники, аватарки и другие причиндалы пользователей публикующих их.

Если хранить ObjectID, то нам придётся делать кучу запросов для вытаскивания информации об авторах. Если же сохранять информацию в документе вместе с комментариями, то мало того что документ растолстеет дублирующейся информацией, так ещё и данные юзера не будет обновляться.


Как лучше поступить в данной ситуации?
  • Вопрос задан
  • 3476 просмотров
Подписаться 5 Оценить Комментировать
Решения вопроса 1
@b0beR
Я считаю, что лучше всего хранить комментарии и информацию о пользователях отдельно. Соответственно каждому комментарию прописывать ObjectID автора (ну или просто id числом). Куча запросов в данном случае совершенно не нужна. Нужно всего лишь после получения списка комментариев пройти по ним и сложить все id авторов в массив, после чего сделать ОДИН запрос, и получить всех авторов (естественно только те поля которые нужны). Примерно так:
authors = db.users.find({"_id": {"$in": authors_ids_array}}, {«nickname»: 1, «photo»: 1});
Собственно запрос по индексированному полю будет моментален, даже при большом количестве запрашиваемых пользователей. После этого соотнести комментарии с полученными пользователями я думаю уже проблем не составит :)
Отдельно по поводу хранения самих комментариев. Тут есть 2 варианта.
Если вам нужна будет возможность довольно часто делать выборку всех комментариев определенного автора, то под комментарии лучше всего создать отдельную коллекцию (то есть хранить каждый комментарий в отдельном документе), с индексированными полями author_id и topic_id. Но в таком случае количество документов в коллекции может вырасти до огромных масштабов.
Если же таких запросов не будет, либо они будут довольно редкими, то быстрее и удобнее хранить все комментарии определенного материала массивом в документе этого самого материала, и тогда не нужно будет обращаться к другой коллекции при получении материала и его комментариев. Запрос всех комментариев определенного автора в таком случае тоже возможен, хотя и будет несколько медленнее.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
VBart
@VBart
Какую информацию об авторах вы собираетесь хранить в комментариях? Скорее всего, все что вам нужно, это ник автора, он же __id автора. Или у вас ник можно менять? Аватар также удобно привязать к нику.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы