Модель форума для MongoDB - PullRequest
       20

Модель форума для MongoDB

4 голосов
/ 28 января 2012

Итак, я создаю модель для форума. Подумайте нить и кучу комментариев, где. Тема имеет много комментариев. В мире РСУБД я бы проектировал это как таковое

Thread --has many--> Comment
id                   id
user_id              thread_id
                     user_id 

Теперь, я предполагаю, что при этом данные / схема будут следовать одной из многих нормальных форм (я забыл, какая). И я думаю, что это самый чувственный способ сделать это. Тем не менее, когда дело доходит до этого в мире NoSQL (MongoDB), что будет лучшим способом для разработки этих отношений? Я мог бы почти сделать это способом RDBMS, но я бы потерял преимущество использования встроенного объекта. По какой-то причине я более склонен делать это как

Thread
_id
user_id
comments => [{_id, user_id, body, created_at}]

Какой самый чувственный способ сделать это, я думаю, это то, о чем я спрашиваю. И почему?

Ответы [ 2 ]

4 голосов
/ 28 января 2012

Прежде всего, я надеюсь, что вы прочитали документы по Схема , что объясняется примером, подобным вашему.

Итак, вы можете вставлять или связывать по своему выбору.Я бы добавил, если ожидается, что количество комментариев будет управляемым (относительно меньшим), и ссылку, если будет слишком много комментариев.

Преимущество встраивания заключается в том, что для показа одного сообщения требуется только один вызов БД./ thread и чаще всего может отправлять только отклик mongodb в браузер как есть (если клиентская сторона выполняет визуализацию пользовательского интерфейса).* Примечание. Для добавления комментария потребуется ОБНОВЛЕНИЕ с использованием $ push.И помните, что comment._id должен быть создан вами, MongoDB не будет автоматически создавать его для вас.Для любых обновлений данных комментариев во встроенном сценарии потребуется ОБНОВЛЕНИЕ с оператором $ position. *

0 голосов
/ 04 июня 2019

В таких случаях комментирование mongoDB не так очевидно, как любая другая СУБД. Как вы знаете, MONGODB вовсе не RDBMS. Кроме того, поскольку это система сериализации данных, вам необходимо оставлять комментарии к каждому обновлению, независимо от того, что вы используете в качестве серверной технологии - PHP / ASP / JAVA или NODE.

db.collection.find( { <query> } )._addSpecial( "$comment", <comment> )
db.collection.find( { <query> } ).comment( <comment> )
db.collection.find( { $query: { <query> }, $comment: <comment> } )

Также, пожалуйста, перейдите по ссылке

https://docs.mongodb.com/manual/reference/operator/meta/comment/

Помните, что массив Mongo DB Jason будет работать следующим образом, как показано в примере

comments => [{_id, user_id, body, created_at}]
comments => [{_id, body, created_at}]
comments => [{_id, user_id, body }]

и т. Д. ... Используйте его соответственно ...

...