Монго один ко многим проблемы отношения и обновления - PullRequest
4 голосов
/ 27 июля 2010

Я внедряю блог на основе MongoDB.

Давайте сначала посмотрим, как парни из Монго рекомендуют нам хранить пост в блоге и его комментарии (http://www.mongodb.org/display/DOCS/Schema+Design):

  • сообщений должно бытьколлекция. Комментарии должны быть встроенными объектами в сообщение для производительности.

Я обнаружил, что очень трудно редактировать или просто утверждать комментарии в этой схеме.

Из-за комментариячасть Почтового документа, я не могу редактировать его отдельно, потому что у него нет идентификатора, чтобы найти его в коллекции комментариев.

Именно поэтому я редактирую все комментарии одновременно. Другая проблема заключается в том, что, хотя я редактирую всекомментарии сразу кто-то может опубликовать новый комментарий, и он будет перезаписан после сохранения коллекции комментариев.

Может быть, я делаю что-то не так?.

С уважением, Алексей Захаров.

1 Ответ

3 голосов
/ 28 июля 2010

Вы должны быть в состоянии использовать Атомные операторы , чтобы обойти проблему «сохранения всех комментариев».Например, что-то вроде этого должно работать:

db.posts.update({ _id: [ID] }, { $set: { "comments.5.body" : "New Comment Body" } })

Редактировать: Просто чтобы расширить мой ответ выше.Работа атомарных операторов заключается в обновлении только тех полей, которые вы им сообщаете, а не всего документа.Это не только делает ваше обновление более кратким, но и значительно быстрее.Особенно, если в вашем примере у вас большой пост с большим количеством комментариев.

...