Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Menu Docs
Página inicial do Docs
/ /

Referências de banco de dados

Para a maioria dos casos de uso do MongoDB, o modelo de dados desnormalizado armazena dados relacionados em um único documento. Em alguns casos, é necessário 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.

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 referenciar documentos armazenados 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 assistente que resolvem DBRefs em documentos, mas a resolução não é automática.

Os DBRefs fornecem um formato e tipo comuns para representar relacionamentos entre documentos. O formato também fornece semântica comum para representar links entre documentos quando seu banco de dados interage 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 inclui o campo _id de um documento em outro documento. O aplicativo pode então executar 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. Se ainda não tiver sido exibido, selecione a organização que contém seu projeto no menu Organizations na barra de navegação.

  2. Se ainda não estiver exibido, selecione seu projeto no menu Projects na barra de navegação.

  3. Na barra lateral, clique em Clusters sob o título Database.

    A página Clusters é exibida.

2
  1. Para o cluster ao qual você deseja adicionar uma referência de banco de dados de dados, clique em Browse Collections.

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

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

3
  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.

4
  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 relacionamento entre dois documentos, use referências manuais. Eles são simples de criar e seu aplicativo pode resolvê-los conforme necessário.

As referências manuais não transmitem os nomes do banco de dados e da coleção. Se os documentos em uma única coleção estiverem relacionados a documentos em mais de uma coleção, considere usar 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 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 Node.js 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, use referências manuais para conectar dois ou mais documentos relacionados. Se você precisar referenciar documentos de várias coleções, considere usar DBRefs.

Voltar

Dados de referência

Nesta página