Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

Referências de banco de dados

Nesta página

  • Referências manuais
  • Plano de fundo
  • Crie uma referência manual na UI do MongoDB Atlas
  • Criar uma Referência Manual no Terminal
  • Usar
  • DBRefs
  • Plano de fundo
  • Formatar
  • Suporte ao driver para DBRefs
  • Usar

Para muitos casos de uso no MongoDB, o modelo de dados desnormalizado em que os dados relacionados são armazenados em um único documento é ideal. No entanto, em alguns casos, faz sentido armazenar informações relacionadas em documentos separados, normalmente em coleções ou bancos de dados diferentes.

Importante

Esta página descreve procedimentos alternativos que antecedem os estágios de pipeline de$lookup e $graphLookup.

Você pode criar uma referência do banco de dados para implantações hospedadas nos seguintes ambientes:

  • MongoDB Atlas: o serviço totalmente gerenciado para implantações MongoDB na nuvem

Os aplicativos do MongoDB usam um dos dois métodos para relacionar documentos:

  • As referências manuais salvam o campo _id de um documento em outro documento como referência. Seu aplicativo executa uma segunda query para retornar os dados relacionados. Essas referências são simples e suficientes para a maioria dos casos de uso.

  • DBRefs são referências de um documento para outro usando o valor do campo _id do primeiro documento, o nome da coleção e, opcionalmente, seu nome de banco de dados, bem como quaisquer outros campos. Os DBRefs permitem que você faça referência a documentos armazenados com mais facilidade em várias coleções ou bancos de dados.

Para resolver os DBRefs, seu aplicativo deve realizar queries adicionais para devolver os documentos referenciados. Alguns drivers do MongoDB fornecem métodos auxiliares para permitir que os DBRefs sejam resolvidos em documentos, mas isso não acontece automaticamente.

Os DBRefs fornecem um formato e tipo comuns para representar relacionamentos entre documentos. O formato DBRef também fornece semântica comum para representar links entre documentos se o banco de dados precisar interagir com várias estruturas e ferramentas.

A menos que você tenha um motivo convincente para usar DBRefs, use referências manuais.

Uma referência manual é a prática de incluir o campo _id de um documento em outro documento. O aplicativo pode então emitir uma segunda query para resolver os campos referenciados conforme necessário.

Para criar uma referência manual na interface do usuário do MongoDB Atlas, siga estas etapas:

1
  1. Na interface do usuário do Atlas MongoDB, clique em Database na barra lateral.

  2. Para a implantação do banco de dados onde você deseja adicionar uma referência do banco de dados, clique em Browse Collections.

  3. No painel de navegação esquerdo, selecione o banco de dados.

  4. No painel de navegação esquerdo, selecione a coleção. Este exemplo faz referência a uma coleção places .

2
  1. Clique em Insert Document.

  2. Clique no ícone de visualização JSON ({{}}).

  3. Cole os seguintes dados no documento:

    {
    "_id": {
    "$oid": "651aea5870299b120736f442"
    },
    "name": "Broadway Center",
    "url": "bc.example.net"
    }
  4. Clique em Insert.

3
  1. No painel de navegação esquerdo, selecione uma coleção diferente. Este exemplo faz referência a uma coleção people.

  2. Clique em Insert Document.

  3. Clique no ícone de visualização JSON ({{}}).

  4. Cole os seguintes dados no documento:

    {
    "_id": {
    "$oid": "651aebeb70299b120736f443"
    },
    "name": "Erin",
    "places_id": "651aea5870299b120736f442"
    "url": "bc.example.net/Erin"
    }
  5. Clique em Insert.

    Quando uma query retorna o documento da coleção people que você pode, se necessário, filtrar os resultados da query da coleção places para o documento referenciado pelo campo places_id.

    Para saber mais sobre como executar queries no MongoDB Atlas, consulte Exibir, Filtrar e Classificar Documentos na documentação do MongoDB Atlas.

Considere a seguinte operação para inserir dois documentos, usando o campo _id do primeiro documento como referência no segundo documento:

original_id = ObjectId()
db.places.insertOne({
"_id": original_id,
"name": "Broadway Center",
"url": "bc.example.net"
})
db.people.insertOne({
"name": "Erin",
"places_id": original_id,
"url": "bc.example.net/Erin"
})

Em seguida, quando uma query retorna o documento da coleção people, você pode, se necessário, fazer uma segunda query para o documento referenciado pelo campo places_id na coleção places.

Para quase todos os casos em que você deseja armazenar uma relação entre dois documentos, use referências manuais. As referências são simples de criar e seu aplicativo pode resolver as referências conforme necessário.

A única limitação da vinculação manual é que essas referências não transmitem os nomes do banco de dados e da collection. Se você tiver documentos em uma única collection relacionados a documentos em mais de uma collection, talvez seja necessário considerar o uso de DBRefs.

DBRefs são uma convenção para representar um documento, em vez de um tipo de referência específico. Elas incluem o nome da coleção e, em alguns casos, o nome do banco de dados, além do valor do campo _id.

Opcionalmente, os DBRefs podem incluir qualquer número de outros campos. Os nomes de campo extras devem seguir todas as regras para nomes de campo impostas pela versão do servidor.

Os DBRefs têm os seguintes campos:

$ref

O campo $ref detém o nome da coleção onde reside o documento referenciado.

$id

O campo $id contém o valor do campo _id no documento referenciado.

$db

Opcional.

Contém o nome do banco de dados onde reside o documento referenciado.

Exemplo

Documentos do DBRef se assemelham ao seguinte documento:

{ "$ref" : <value>, "$id" : <value>, "$db" : <value> }

Considere um documento de uma coleção que armazenou um DBRef em um campo creator :

{
"_id" : ObjectId("5126bbf64aed4daf9e2ab771"),
// .. application fields
"creator" : {
"$ref" : "creators",
"$id" : ObjectId("5126bc054aed4daf9e2ab772"),
"$db" : "users",
"extraField" : "anything"
}
}

O DBRef neste exemplo aponta para um documento na coleção creators do banco de dados users que tem ObjectId("5126bc054aed4daf9e2ab772") em seu campo _id. Ele também contém um campo opcional.

Observação

A ordem dos campos no DBref é importante, e você deve usar a sequência acima ao usar um DBref.

Driver
Suporte DBRef
Notas
C
Não suportado
Você pode percorrer as referências manualmente.
C++
Não suportado
Você pode percorrer as referências manualmente.
C#
Suportado
Consulte a página do driver C# para obter mais informações.
Go
Não suportado
Você pode percorrer as referências manualmente.
Haskell
Não suportado
Você pode percorrer as referências manualmente.
Java
Suportado
Consulte a página do driver Java para obter mais informações.
Node.js
Suportado
Consulte a página do driver .js nó para obter mais informações.
Perl
Suportado
Consulte a página do driver Perl para obter mais informações.
PHP
Não suportado
Você pode percorrer as referências manualmente.
Python
Suportado
Consulte a página do driver do PyMongo para obter mais informações.
Ruby
Suportado
Consulte a página do driver Ruby para obter mais informações.
Scala
Não suportado
Você pode percorrer as referências manualmente.

Na maioria dos casos, você deve usar o método de referência manual para conectar dois ou mais documentos relacionados. No entanto, se você precisar referenciar documentos de várias coleções, considere usar DBRefs.

← Referência do modelo de dados