MongoDB - Как обращаться с отношениями - PullRequest
4 голосов
/ 02 октября 2011

Я только начинаю узнавать о базе данных nosql, особенно MongoDB (без конкретной причины для mongodb).Я просматриваю несколько обучающих сайтов, но все еще не могу понять, как они обрабатывают отношения между двумя документами / сущностью

Скажем, например: 1. Один сотрудник работает в одном отделе 2. Один сотрудник работает во многих отделах

Я не знаю, имеет ли смысл термин «отношения» для mongodb или нет.

Может кто-нибудь что-нибудь рассказать о связях, отношениях.

Ответы [ 4 ]

7 голосов
/ 02 октября 2011

Краткий ответ: с "nosql" вы бы не сделали это таким образом.

Что бы вы сделали вместо соединения или отношения, это добавили бы отделы, в которых находится пользователь, к объекту пользователя.

Вы также можете добавить пользователя в поле в объекте «отдел», если вам нужно было видеть пользователей с этого направления."database.

См. этот очень тесно связанный вопрос: Как выполнить эквивалент SQL-соединения в MongoDB?

1 голос
/ 03 октября 2011

Как правило, если вы решили узнать о базах данных NoSql, вы должны следовать «пути NoSql», то есть изучать принципы, лежащие в основе движения и подхода к проектированию, а не просто пытаться отобразить СУБД в ваш первый проект NoSql.

Проще говоря - вы должны научиться встраивать и денормализовать данные (как было предложено выше Уиллом), а не просто копировать идентификатор для имитации внешних ключей.

Если вы сделаете это «Foreign _id Way», следующим шагом будет поиск транзакций, чтобы убедиться, что две «строки» последовательно вставляются / обновляются. Несколько шагов после того, как Oracle / MySql ждет. :)

1 голос
/ 02 октября 2011

В некоторых случаях вы хотите / должны хранить документы отдельно, в этом случае вы берете _id из одного объекта и добавляете его как значение в ваш другой объект.

Например:

db.authors
{
  _id:ObjectId(21EC2020-3AEA-1069-A2DD-08002B30309D)
  name:'George R.R. Martin'
}

db.books
{
  name:'A Dance with Dragons'
  authorId:ObjectId(21EC2020-3AEA-1069-A2DD-08002B30309D)
}

Официальных отношений между книгами и авторами не существует, это просто копия _id от авторов в значение authorId в книгах.

Надеюсь, это поможет.

1 голос
/ 02 октября 2011

В общем, вы хотите денормализовать ваши данные в ваших коллекциях (= таблицы).Ваши коллекции должны быть оптимизированы таким образом, чтобы вам не нужно было выполнять объединения (объединения невозможны в NoSQL).

В MongoDB вы можете ссылаться на другие коллекции (= таблицы) или встраивать их в каждуюдругое - все, что имеет больше смысла в вашей области.Существуют ограничения по размеру записей в коллекции, поэтому вы не можете просто встроить энциклопедию britannica; -)

Вероятно, будет лучше, если вы ищете документацию API и примеры для языка программирования по вашему выбору.Для Ruby я бы порекомендовал библиотеку Mondoid: http://mongoid.org/docs/relations.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...