English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Referência de Banco de Dados MongoDB

Como visto no último capítulo sobre relações no MongoDB, para implementar uma estrutura de banco de dados normalizada no MongoDB, usamos o conceito de relação referenciada (também conhecido como referência manual), onde armazenamos manualmente o id do documento referenciado em outros documentos. No entanto, quando um documento contém referências a documentos de diferentes coleções, podemos usar MongoDB DBRefs.

DBRef em referência manual

Como cenário de exemplo, vamos considerar um banco de dados onde diferentes tipos de endereços (casa, escritório, correio, etc.) são armazenados em diferentes coleções (address_home, address_office, address_mailing, etc.). Agora, quando um documento da coleção user referenciar um endereço, ele também precisa especificar a coleção a ser pesquisada com base no tipo de endereço. Quando um documento referencia documentos em várias coleções, devemos usar DBRefs.

Usando DBRef

Existem três campos em DBRefs-

  • $ref −Este campo especifica a coleção do documento referenciado

  • $id −Este campo especifica o campo _id do documento referenciado

  • $db −Este é um campo opcional que contém o nome do banco de dados onde o documento referenciado está localizado

Considere um documento de usuário exemplo com um campo DBRefaddressComo mostrado no trecho de código-

{
   "_id": ObjectId("53402597d852426020000002",
   "address": {
   "$ref": "address_home",
   "$id": "ObjectId("534009e4d852427820000002",
   "$db": "w"3codebox",
   "contact": ""987654321",
   "dob": "0"1-01-1991",
   "name": "Tom Benzamin"
}

O campo DBRef aqui especifica que o documento de endereço está localizado em w3No banco de dados codebox, na coleção address_home, o id é534009e4d8524278200000002.

O código abaixo busca dinamicamente o documento de id especificado pelo parâmetro $id no conjunto especificado pelo parâmetro $ref (no nosso exemplo, address_home).

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

O código acima retornaaddress_homeOs seguintes documentos de endereço existem na coleção:-

{
   "_id": ObjectId("534009e4d852427820000002",
   "building": ""22 A, Indiana Apt",
   "pincode": : 123456,
   "city": "Los Angeles",
   "state": "California"
}