Учебники

MongoDB — База данных Ссылки

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

DBRefs vs Руководство Ссылки

В качестве примера сценария, где мы будем использовать DBRef вместо ссылок вручную, рассмотрим базу данных, в которой мы храним различные типы адресов (домашний, офисный, почтовый и т. Д.) В разных коллекциях (address_home, address_office, address_mailing и т. Д.). Теперь, когда документ пользовательской коллекции ссылается на адрес, он также должен указать, какую коллекцию следует просматривать на основе типа адреса. В таких случаях, когда документ ссылается на документы из многих коллекций, мы должны использовать DBRef.

Использование DBRefs

В DBRefs есть три поля —

  • $ ref — это поле указывает коллекцию ссылочного документа

  • $ id — это поле указывает поле _id ссылочного документа

  • $ db — это необязательное поле и содержит имя базы данных, в которой находится ссылочный документ

$ ref — это поле указывает коллекцию ссылочного документа

$ id — это поле указывает поле _id ссылочного документа

$ db — это необязательное поле и содержит имя базы данных, в которой находится ссылочный документ

Рассмотрим пример пользовательского документа с адресом поля DBRef, как показано во фрагменте кода —

{
   "_id":ObjectId("53402597d852426020000002"),
   "address": {
   "$ref": "address_home",
   "$id": ObjectId("534009e4d852427820000002"),
   "$db": "tutorialspoint"},
   "contact": "987654321",
   "dob": "01-01-1991",
   "name": "Tom Benzamin"
}

Поле адреса DBRef здесь указывает, что указанный адресный документ находится в коллекции address_home базы данных tutorialspoint и имеет идентификатор 534009e4d852427820000002.

Следующий код динамически ищет в коллекции, указанной параметром $ ref (в нашем случае address_home ), документ с идентификатором, указанным параметром $ id в DBRef.

>var user = db.users.findOne({"name":"Tom Benzamin"})
>var dbRef = user.address
>db[dbRef.$ref].findOne({"_id"🙁dbRef.$id)})

Приведенный выше код возвращает следующий адресный документ, присутствующий в коллекции address_home