Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.

Referências de banco de dados: referências manuais e DBRefs

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

Você pode usar o estágio de pipeline $lookup para executar uma junção externa esquerda a uma collection não fragmentada no mesmo banco de dados.

Você também pode usar o estágio $graphLookup do pipeline para unir uma coleção não fragmentada e realizar uma procurar recursiva.

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. As referências manuais funcionam para a maioria dos casos de uso e, geralmente, devem ser preferidas em relação aos DBRefs.

  • 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, o nome do banco de dados, bem como quaisquer outros campos. A menos que seu aplicativo precise explicitamente 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": { "$oid": "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:

const original_id = db.movies.insertOne({ title: "Reference Demo Film 2099"}).insertedId db.comments.insertOne({ name: "Reference Demo Viewer", movie_id: original_id, text: "A thrilling adventure set in the future."})

Para recuperar o documento referenciado pelo campo movie_id, faça uma segunda query para o documento na coleção movies:

db.comments.findOne( { movie_id: original_id }, { name: 1, text: 1, _id: 0 })
{ name: 'Reference Demo Viewer', text: 'A thrilling adventure set in the future.'}

Para quase todos os casos em que você deseja armazenar um relacionamento entre dois documentos, use referências manuais. Eles são simples de criar e seu aplicativo pode resolvê-los conforme necessário.

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.

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

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 .NET/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.