Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

Criar e consultar uma visualização

Nesta página

  • db.createCollection() Sintaxe
  • db.createView() Sintaxe
  • Restrições
  • Operações não suportadas
  • Exemplo
  • Preencher a collection
  • Use db.createView() para criar uma visualização
  • Use db.createCollection() para criar uma visualização
  • Comportamento
  • Otimizações de agregação
  • Bloqueio de recursos

Para criar uma visualização, use um dos seguintes métodos:

Para criar uma visualização na interface do UI do Atlas MongoDB, você deve utilizar uma visualização materializada. Para saber mais, consulte Criar uma visualização materializada na interface do usuário do MongoDB Atlas.

Importante

Os nomes de visualização são incluídos na saída da lista de collections

As operações que listam collections, como db.getCollectionInfos() e db.getCollectionNames(), incluem visualizações em seus resultados.

A definição da visualização é pública; ou seja, as operações db.getCollectionInfos() e explain na exibição incluirão o pipeline que define a visualização. Dessa forma, evite se referir diretamente a campos e valores confidenciais nas definições de visualização.

db.createCollection(
"<viewName>",
{
"viewOn" : "<source>",
"pipeline" : [<pipeline>],
"collation" : { <collation> }
}
)
db.createView(
"<viewName>",
"<source>",
[<pipeline>],
{
"collation" : { <collation> }
}
)
  • Você deve criar visualizações no mesmo banco de dados que a collection de origem.

  • Uma definição de visualização pipeline não pode incluir o estágio $out ou $merge. Essa restrição também se aplica a pipelines incorporados, como pipelines usados em estágios $lookup ou $facet.

  • Você não pode renomear uma visualização depois que ela for criada.

Algumas operações não estão disponíveis com visualizações:

Para mais informações, consulte Operações suportadas para visualizações.

Este exemplo preenche uma collection com dados do aluno e cria uma visualização para query os dados.

Crie uma collection students para usar neste exemplo:

db.students.insertMany( [
{ sID: 22001, name: "Alex", year: 1, score: 4.0 },
{ sID: 21001, name: "bernie", year: 2, score: 3.7 },
{ sID: 20010, name: "Chris", year: 3, score: 2.5 },
{ sID: 22021, name: "Drew", year: 1, score: 3.2 },
{ sID: 17301, name: "harley", year: 6, score: 3.1 },
{ sID: 21022, name: "Farmer", year: 1, score: 2.2 },
{ sID: 20020, name: "george", year: 3, score: 2.8 },
{ sID: 18020, name: "Harley", year: 5, score: 2.8 },
] )

Use o db.createView() para criar uma visualização limitada aos alunos do primeiro ano:

db.createView(
"firstYears",
"students",
[ { $match: { year: 1 } } ]
)

No exemplo:

  • firstYears é o nome da nova visualização.

  • students é a collection na qual a visualização se baseia.

  • $match é uma expressão de aggregation que corresponde aos alunos do primeiro ano na collection students.

Este exemplo consulta a visualização:

db.firstYears.find({}, { _id: 0 } )

O resultado a seguir contém apenas os documentos com dados sobre os alunos do primeiro ano. A projeção do { _id: 0 } suprime o campo _id na saída.

[
{ sID: 22001, name: 'Alex', year: 1, score: 4 },
{ sID: 22021, name: 'Drew', year: 1, score: 3.2 },
{ sID: 21022, name: 'Farmer', year: 1, score: 2.2 }
]

Observação

Restrições de projeção

As operações find() nas visualizações não suportam os seguintes operadores de projeção :

O método db.createCollection() permite a você criar uma collection ou uma visualização com opções específicas.

O exemplo a seguir cria uma visualização graduateStudents. O modo de exibição contém apenas documentos selecionados pelo estágio $match. A configuração de agrupamento opcional determina a ordem de classificação.

db.createCollection(
"graduateStudents",
{
viewOn: "students",
pipeline: [ { $match: { $expr: { $gt: [ "$year", 4 ] } } } ],
collation: { locale: "en", caseFirst: "upper" }
}
)

Observação

Comportamento do agrupamento

  • Você pode especificar um agrupamento padrão para uma visualização no momento da criação. Se nenhum agrupamento for especificado, o agrupamento padrão da visualização será o coletor de comparação binária "simples". Ou seja, a visualização não herda o agrupamento padrão da collection.

  • As comparações de strings na visualização usam o agrupamento padrão da visualização. Uma operação que tenta alterar ou substituir a coleta padrão de uma visualização falhará com um erro.

  • Se estiver criando um modo de exibição a partir de outro modo de exibição, você não poderá especificar um agrupamento que difere do agrupamento do modo de exibição de origem.

  • Se executar uma aggregation que envolve múltiplas visualizações, como com $lookup ou $graphLookup, as visualizações deverão ter o mesmo agrupamento.

O exemplo a seguir consulta a visualização. O estágio $unset remove o campo _id da saída para maior clareza.

db.graduateStudents.aggregate(
[
{ $sort: { name: 1 } },
{ $unset: [ "_id" ] }
]
)

Quando a saída é classificada, o estágio $sort usa a ordem de agrupamento para classificar as letras maiúsculas antes das letras minúsculas.

[
{ sID: 18020, name: 'Harley', year: 5, score: 2.8 },
{ sID: 17301, name: 'harley', year: 6, score: 3.1 }
]

As seções a seguir descrevem os comportamentos de criação de visualização e consultas.

Quando você query uma visualização:

  • As queries filter, projection, sort, skip, limit e outras operações para db.collection.find() são convertidas para os estágiosequivalentes do aggregation pipeline.

  • O MongoDB acrescenta a query do cliente ao pipeline subjacente e retorna os resultados desse pipeline combinado para o cliente. O MongoDB pode aplicar otimizações de pipeline de agregação ao pipeline combinado.

  • O otimizador de pipeline de agregação remodela os estágios do pipeline de agregação de visualização para melhorar o desempenho. A otimização não altera os resultados da query.

db.createView() obtém um bloqueio exclusivo na coleção ou visualização especificada durante a operação. Todas as operações subsequentes na coleção devem aguardar até quedb.createView() libere o bloqueio. db.createView() normalmente mantém esse bloqueio por um curto período.

Criar uma visualização exige a obtenção de uma trava exclusiva adicional na collection system.views no banco de dados. Essa trava bloqueia a criação ou modificação de visualizações no banco de dados até que o comando seja concluído.

Voltar

Visualizações