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.

Reforçar a consistência de dados com a incorporação

Se seu esquema armazenar os mesmos dados em várias coleções, você poderá incorporar dados relacionados para remover a duplicação. O esquema atualizado e desnormalizado mantém os dados consistentes ao manter os valores dos dados em um único local.

A incorporação de dados relacionados simplifica seu esquema e garante que o usuário sempre leia os dados mais atuais. No entanto, a incorporação pode não ser a melhor opção para representar relações complexas, por exemplo, relações muitos-para-muitos.

Como incorporar dados relacionados de forma otimizada depende das queries executadas pelo seu aplicativo. Ao incorporar dados em uma única coleção, considere os índices que permitem queries de desempenho e estruturam seu esquema para permitir índices lógicos eficientes.

Para comparar os benefícios da incorporação de documentos e referências, consulte Vincular dados relacionados.

Analise os diferentes métodos para forçar a consistência dos dados para garantir que a incorporação seja a melhor abordagem para seu aplicativo. Para saber mais, consulte Consistência de dados.

Atualizar a forma como os dados são armazenados em seu banco de dados pode impactar os índices e as consultas existentes. Ao atualizar seu esquema, atualize também os índices e as consultas do seu aplicativo para contabilizar as alterações do esquema.

O exemplo a seguir impõe consistência de dados em um aplicação e-commerce . No esquema inicial, as informações do produto são duplicadas nas coleções products e sellers. O campo sellerId na collection products é uma referência à collection sellers e vincula os dados juntos.

// products collection [ { _id: 111, sellerId: 456, name: "sweater", price: 30, rating: 4.9, color: "green" }, { _id: 222, sellerId: 456, name: "t-shirt", price: 10, rating: 4.2, color: "blue" }, { _id: 333, sellerId: 456, name: "vest", price: 20, rating: 4.7, color: "red" } ]
// sellers collection [ { _id: 456, name: "Cool Clothes Co", location: { address: "21643 Andreane Shores", state: "Ohio", country: "United States" }, phone: "567-555-0105", products: [ { id: 111, name: "sweater", price: 30 }, { id: 222, name: "t-shirt", price: 10 }, { id: 333 name: "vest", price: 20 } ] } ]

Para desnormalizar o esquema e forçar a consistência, incorpore as informações do produto dentro da coleção sellers :

db.sellers.insertOne( { _id: 456, name: "Cool Clothes Co", location: { address: "21643 Andreane Shores", state: "Ohio", country: "United States" }, phone: "567-555-0105", products: [ { id: 111, name: "sweater", price: 30, rating: 4.9, color: "green" }, { id: 222, name: "t-shirt", price: 10, rating: 4.2, color: "blue" }, { id: 333, name: "vest", price: 20, rating: 4.7, color: "red" } ] })

O esquema atualizado retorna todas as informações do produto quando um usuário faz uma query a um vendedor específico. O esquema atualizado não requer lógica ou manutenção adicionais para manter os dados consistentes, pois os dados são desnormalizados em uma única coleção.

Depois de reestruturar o esquema, você pode criar índices para oferecer suporte a queries comuns. Por exemplo, se os usuários costumam consultar produtos por cor, você pode criar um índice no campo products.color :

db.sellers.createIndex( { "products.color": 1 } )