MongoDB.local SF, Jan 15: See the speaker lineup & ship your AI vision faster. Use WEB50 to save 50%
Find out more >
Menu Docs
Página inicial do Docs
/ /

Padrão de collection única

Crie um modelo de dados que use um array de referências para agrupar documentos relacionados de diferentes tipos em uma única collection. O Padrão de Coleção Única pode ser especialmente útil para modelar relacionamentos de muitos para muitos com apenas uma cópia dos dados. Esse padrão pode reduzir a duplicação de dados em casos de uso em que o custo da duplicação é uma preocupação.

As seguintes características definem o Padrão de Coleção Única:

  • Armazena todos os documentos acessados com frequência juntos em uma única collection.

  • Armazena relacionamentos entre documentos como ponteiros ou estruturas dentro de cada documento.

  • Mapeia as relações entre documentos por meio de índices no campo ou array. Esse índice oferece suporte à recuperação de documentos relacionados em uma única query sem o uso de operações de junção de banco de dados .

Considere usar o padrão de collection única ao modelar sistemas com operações de alta velocidade, requisitos de baixa latência e operações de escrita frequentes. Ao dividir o documento em partes menores, em vez de grandes documentos incorporados, o banco de dados pode executar operações de gravação menores e melhorar o desempenho.

No exemplo a seguir, um aplicação permite que os alunos vejam o status das turmas em que se inscreveram no semestre. O sistema pode precisar atualizar com frequência vários campos para cada classe, como current_topic, upcoming_session_summary ou next_class_time. Para evitar a duplicação de informações para vários alunos que cursam a mesma classe, queremos manter os alunos e as classes como entidades de documento separadas na mesma collection.

Considere os seguintes esquemas de exemplo para uma classe e um aluno. Para modelar seu relacionamento, os documentos da classe e do aluno contêm a array links. Essa array inclui os campos doc_type e target para fazer referência ao relacionamento entre o aluno e as entidades de classe .

documento de classe :

{
_id : "CS101-001",
doc_type : "class",
class_name : "Introduction to Programming",
course_id : "CS101",
instructor : {
name : "Dr. Emily Smith",
email : "emily.smith@example.com",
office_hours : "Tuesdays and Thursdays 2:00 PM - 4:00 PM"
},
semester : "Spring 2025",
schedule : [
{
day_time : "Monday 10:00 AM - 11:30 AM",
location : "Room 101, Science Building"
},
{
day_time : "Wednesday 10:00 AM - 11:30 AM",
location : "Room 101, Science Building"
},
{
day_time : "Friday 10:00 AM - 11:30 AM",
location : "Room 101, Science Building"
}
],
current_topic : "Loops and Iterations",
next_class_time : "2025-01-09T10:00:00Z",
upcoming_session_summary : "We will explore different types of loops (for, while) and how to use them effectively in Python.",
links : [
{ target : "CS101-001", doc_type : "class" },
{ target : "S10023", doc_type : "student" },
{ target : "S12345", doc_type : "student" },
...
{ target : "S12355", doc_type : "student" }
]
}

documento do aluno :

{
_id : "S12345",
doc_type : "student",
name : "Jane Doe",
major : "Computer Science",
semester : "Spring 2025",
registered_classes : [
{
course_id : "CS101",
class_instance_id : "CS101-001",
class_name : "Introduction to Programming"
},
{
course_id : "MATH201",
class_instance_id : "MATH201-002",
class_name : "Calculus II"
}
],
links : [
{ target : "CS101-001", doc_type : "class" },
{ target : "MATH201-002", doc_type : "class" },
{ target : "S12345", doc_type : "student" }
]
}

Para otimizar queries, indexe o campo links :

db.students_classes.createIndex({ "links.target": 1, "links.doc_type": 1 })

Você pode fazer query das informações de um aluno e de todas as aulas que ele faz sem precisar realizar nenhuma operação de junção:

db.students_classes.find({ "links.target": "S12345" })

Da mesma forma, você pode consultar todos os alunos registrados em uma determinada classe:

db.students_classes.find({ "doc_type": "student", "links.target": "CS101-001" })

Voltar

Archive Data

Nesta página