Как разработать схему для модели автора / пользователя в mongodb - PullRequest
7 голосов
/ 07 августа 2011

Я просмотрел большинство статей по разработке схемы mongodb на веб-сайте mongo и большинство вопросов здесь, на SO.Есть еще один вариант использования, который я не выяснил.Глядя на эти учебные пособия, они обычно ссылаются на проблему комментариев к статье и проблему товаров / категорий.Я хочу выяснить, как смоделировать отношения один ко многим (автор к постам) при запросе списка постов.Вот пример схемы:

Users: {
    _id: ObjectID
    Name: String
    Email: String
}

Posts: {
    _id: ObjectID
    user_id: ObjectID
    body: String
    comments: [
        body: String
    ]
}

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

  1. Если вы создадите массив ObjectID из пользовательского запроса из запроса сообщений, а затем выполните запрос db.users.find ({_id: {$ in: PostsUserIDArray}});После этого вы будете использовать логику приложения, чтобы сопоставить правильную информацию о пользователе с правильным сообщением?

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

  3. Опция, о которой я или мой друг не подумали.

Я ценю любую помощь, пытаясь обернуть голову вокруг моделирования данных монго.

1 Ответ

2 голосов
/ 07 августа 2011

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

Редактировать: ссылка навидео http://lacantine.ubicast.eu/videos/3-mongodb-deployment-strategies/

...