Explore o novo chatbot do Developer Center! O MongoDB AI chatbot pode ser acessado na parte superior da sua navegação para responder a todas as suas perguntas sobre o MongoDB .

Saiba por que o MongoDB foi selecionado como um líder no 2024 Gartner_Magic Quadrupnt()

Construindo com padrões: o padrão Attribute

Ken W. Alger, Daniel Coupal3 min read • Published Jan 11, 2022 • Updated Jan 23, 2023
Facebook Icontwitter iconlinkedin icon
Avaliar este tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Welcome back to the Building with Patterns series. Last time we looked at the Polymorphic Pattern which covers situations when all documents in a collection are of similar, but not identical, structure. In this post, we'll take a look at the Attribute Pattern.
O Padrão de Atributo é particularmente adequado quando:
  • We have big documents with many similar fields but there is a subset of fields that share common characteristics and we want to sort or query on that subset of fields, or
  • The fields we need to sort on are only found in a small subset of documents, or
  • Ambas as condições acima são atendidas nos documentos.
Por motivos de desempenho, para otimizar nossa pesquisa, provavelmente precisaremos de muitos índices para contabilizar todos os subconjuntos. A criação de todos esses índices pode reduzir o desempenho. O Attribute Pattern fornece uma boa solução para esses casos.

O padrão de atributo

Let's think about a collection of movies. The documents will likely have similar fields involved across all of the documents: title, director, producer, cast, etc. Let's say we want to search on the release date. A challenge that we face when doing so, is which release date? Movies are often released on different dates in different countries.
1{
2 title: "Star Wars",
3 director: "George Lucas",
4 ...
5 release_US: ISODate("1977-05-20T01:00:00+01:00"),
6 release_France: ISODate("1977-10-19T01:00:00+01:00"),
7 release_Italy: ISODate("1977-10-20T01:00:00+01:00"),
8 release_UK: ISODate("1977-12-27T01:00:00+01:00"),
9 ...
10}
A busca por uma data de lançamento exigirá a análise de muitos campos ao mesmo tempo. Para pesquisar rapidamente as datas de lançamento, precisaríamos vários índices em nossa coleção de filmes:
1{release_US: 1}
2{release_France: 1}
3{release_Italy: 1}
4...
Usando o Attribute Pattern, podemos mover esse subconjunto de informações para uma matriz e reduzir as necessidades de indexação. Transformamos essas informações em uma array de pares de valores-chave:
1{
2 title: "Star Wars",
3 director: "George Lucas",
4 ...
5 releases: [
6 {
7 location: "USA",
8 date: ISODate("1977-05-20T01:00:00+01:00")
9 },
10 {
11 location: "France",
12 date: ISODate("1977-10-19T01:00:00+01:00")
13 },
14 {
15 location: "Italy",
16 date: ISODate("1977-10-20T01:00:00+01:00")
17 },
18 {
19 location: "UK",
20 date: ISODate("1977-12-27T01:00:00+01:00")
21 },
22 ...
23 ],
24 ...
25}
A indexação se torna muito mais gerenciável com a criação de um índice nos elementos elementos da matriz:
1{ "releases.location": 1, "releases.date": 1}
Usando o Attribute Pattern, podemos adicionar organização aos nossos documentos para características comuns e considerar campos raros/imprevisíveis. Por exemplo, um filme lançado em um evento novo ou pequeno. Além disso, a mudança para uma convenção de chave/valor permite o uso de nomes não determinísticos e a fácil adição de qualificadores. Por exemplo, se nossa coleta de dados fosse sobre garrafas de água, nossos atributos poderiam ser mais ou menos assim:
1"specs": [
2 { k: "volume", v: "500", u: "ml" },
3 { k: "volume", v: "12", u: "ounces" }
4]
Aqui, dividimos as informações em chaves e valores, "k" e "v," e adicionamos um terceiro campo, "u,", que permite que as unidades de medida sejam armazenadas separadamente.
1{"specs.k": 1, "specs.v": 1, "specs.u": 1}

Caso de uso de amostra

O Attribute Pattern é adequado para esquemas que têm conjuntos de campos com o mesmo tipo de valor, como listas de datas. Também funciona bem ao trabalhar com as características dos produtos. Alguns produtos, como roupas, podem ter tamanhos expressos em pequeno, médio ou grande. Outros produtos da mesma coleção podem ser expressos em volume. No entanto, outros podem ser expressos em dimensões físicas ou peso.
A customer in the domain of asset management recently deployed their solution using the Attribute Pattern. The customer uses the pattern to store all characteristics of a given asset. These characteristics are seldom common across the assets or are simply difficult to predict at design time. Relational models typically use a complicated design process to express the same idea in the form of user-defined fields.
Embora muitos dos campos no catálogo de produtos sejam semelhantes, como nome, fornecedor, fabricante, país de origem etc., as especificações ou atributos do item podem ser diferentes. Se seus padrões de acesso a aplicativos e dados dependem da pesquisa em vários desses campos diferentes ao mesmo tempo, o Padrão de Atributo fornece uma boa estrutura para os dados.

Conclusão

O Padrão de Atributo facilita a indexação dos documentos, direcionando muitos campos semelhantes por documento. Ao mover esse subconjunto de dados para um subdocumento de valor-chave, podemos usar nomes de campo não determinísticos, adicionar qualificadores adicionais às informações e declarar com mais clareza a relação do campo e valor originais. Quando usamos o Attribute Pattern, precisamos de menos índices, nossas consultas se tornam mais simples de escrever e mais rápidas.

Facebook Icontwitter iconlinkedin icon
Avaliar este tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Tutorial

MongoDB Atlas Authentication Using Service Accounts (OAuth)


Jan 23, 2025 | 9 min read
Artigo

Paginations 2.0: Por que escolher o MongoDB


Jul 12, 2024 | 4 min read
Artigo

Protegendo o MongoDB com TLS


May 09, 2022 | 4 min read
exemplo de código

Filme: exemplo de aplicativo de microsserviços Go


Sep 11, 2024 | 0 min read