Связанные отношения MongoDB против DBRef - PullRequest
0 голосов
/ 01 мая 2020

Я начал изучать MongoDB как неделю go, и я застрял в отношениях. Больше похоже на то, что я в замешательстве. Я понимаю, когда использовать встроенные отношения, а когда использовать ссылочные отношения. Я знаю, что встроенные отношения имеют некоторые недостатки, поэтому мы предпочитаем ссылочные отношения встроенным. Сейчас я изучаю DBRefs. Дело в том, что я не считаю это полезным в любом случае. Это то, что я думаю. Надеюсь, я ошибаюсь.

В DBrefs мы можем ссылаться на документы из разных коллекций в одном документе, который находится в другой коллекции. В RefRels мы можем ссылаться на разные документы из разных коллекций в одном документе, который находится в другой коллекции.

Я имею в виду, мы можем выполнить то же самое, используя DBrefs, что мы можем выполнить, используя ссылочные отношения.

В ссылочных отношениях мы создаем поле в коллекции в документе и сохраняем ObjectIds документов из разных коллекций, например:

> db.Employee.insert({"Emp_Name":"Emp_1", "Emp_Address":[ObjectId("some_id_from_Address_collection"), ObjectId("some_id_from_Address_collection"), ObjectId("some_id_from_Address_collection")], "Emp_Phone":[ObjectId("some_id_from_Phone_collection"), ObjectId("some_id_from_Phone_collection"), ObjectId("some_id_from_Phone_collection")]})

В DBrefs мы создаем поле в коллекции в документе и храним значения с использованием ObjectIds, как мы это делали в ссылочных отношениях, но другим способом. Рассмотрим следующий пример:

> db.Employee.insert({"address": {"$ref": "address_home", "$id": ObjectId("534009e4d852427820000002"), "$db": "tutorialspoint"}, "name": "Tom Benzamin"})

Мы все еще используем ObjectId для хранения значений в коллекции Employee, но синтаксис другой, потому что в этом примере мы упоминаем, какую БД и коллекцию искать.

Почему бы просто не использовать ссылочные отношения и сэкономить время, вместо использования этого запутанного и длинного запроса и напрасно тратить половину времени?

Я что-то упустил?

Стоит ли мне даже изучать DBrefs?

1 Ответ

0 голосов
/ 02 мая 2020

Смысл DBRef в том, что он позволяет ссылаться на базу данных и коллекцию из одного поля. Без него вам понадобятся два поля [*].

[*] Технически вы можете использовать одно поле, например, само Ha sh, которое содержит базу данных и ссылку на коллекцию, но тогда это по сути то же самое, что и DBRef, но без метки.

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

DBRef действительно просто предоставляет более удобный способ хранения пары имя базы данных + коллекция.

ЕСЛИ все ваши коллекции находятся в одной базе данных, вам вообще не нужен DBRef (а на самом деле он только мешает).

Стоит ли мне даже изучать DBrefs?

Они очень нишевая особенность. Наверное, нет.

...