Zhe1ka
@Zhe1ka
JavaScript developer

Как правильно структурировать mongodb?

Делаю сайт, на котором буду получать от пользователей информацию о их местожительстве. Работаю на MeteorJS поэтому база данных используется mongodb. Как правильно будет структурировать коллекцию: создать один объект, в котором сделать структуру Страна -> Город -> Пользователь? или просто добавлять в коллекцию каждого нового пользователя как отдельный объект? Либо возможно есть лучший способ организовать это? Если будет пользователей (к примеру) миллион, нужно, чтобы поиск осуществлялся максимально быстро. Будут такие запросы, в которых нужно будет пройти по всем пользователям и найти поле (например мыло). Спасибо
  • Вопрос задан
  • 426 просмотров
Решения вопроса 1
@bromzh
Drugs-driven development
Лучший способ - взять реляционную БД, раз тут зреет структура и отношения. Для этого они и нужны.
Когда начинаются вопросы "какую структуру выбрать" или "как хранить, всё в 1 документе или по коллекциям" сразу становится понятно, что выбор БД был неверным.

Но раз уж монга, то лучше хранить всё в 1 документе, а не размазывать всё по кучи коллекций. А чтобы быстро искалось (в том числе, и по полям внутренних объектов) есть индексы.
Да, у монги есть и подобие транзакций, и джойны. Но в реляционных БД это всё сделано лучше и надёжнее, ACID всё же. Так что минимум коллекций, потолще документы.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@aylo
Meteor изначально даст вам схему документа пользователя (при условии использования стандартного пакета от MDG Accounts)

{
  _id: "bbca5d6a-2156-41c4-89da-0329e8c99a4f",  // Meteor.userId()
  username: "cool_kid_13", // unique name
  emails: [
    // each email address can only belong to one user.
    { address: "cool@example.com", verified: true },
    { address: "another@different.com", verified: false }
  ],
  createdAt: Wed Aug 21 2013 15:16:52 GMT-0700 (PDT),
  profile: {
    // The profile is writable by the user by default.
    name: "Joe Schmoe"
  },
  services: {
    facebook: {
      id: "709050", // facebook id
      accessToken: "AAACCgdX7G2...AbV9AZDZD"
    },
    resume: {
      loginTokens: [
        { token: "97e8c205-c7e4-47c9-9bea-8e2ccc0694cd",
          when: 1349761684048 }
      ]
    }
  }
}


И как мне кажется логично будет запихать нужные вам данные в profile, либо создать объект location

Достать потом это не составит труда (произвольные примеры):
Meteor.user().profile.country
Meteor.user().profile.city

Meteor.user().location.country
Meteor.user().location.city


docs.meteor.com/#/full/accounts_api
Ответ написан
Ваш ответ на вопрос

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

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