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

Campos do projeto para retornar da consulta


➤ Use o menu suspenso Selecione a linguagem no canto superior direito para definir a linguagem dos exemplos a seguir.


➤ Use o menu suspenso Selecione a linguagem no canto superior direito para definir a linguagem dos exemplos a seguir ou selecione MongoDB Compass.


Por padrão, as queries no MongoDB retornam todos os campos em documentos correspondentes. Para limitar a quantidade de dados que o MongoDB envia aos aplicativos, você pode incluir um documento de projeção para especificar ou restringir os campos a serem retornados.

Esta página fornece exemplos de operações de query com projeção usando o método db.collection.find() em mongosh.

db.inventory.insertMany( [
{ item: "journal", status: "A", size: { h: 14, w: 21, uom: "cm" }, instock: [ { warehouse: "A", qty: 5 } ] },
{ item: "notebook", status: "A", size: { h: 8.5, w: 11, uom: "in" }, instock: [ { warehouse: "C", qty: 5 } ] },
{ item: "paper", status: "D", size: { h: 8.5, w: 11, uom: "in" }, instock: [ { warehouse: "A", qty: 60 } ] },
{ item: "planner", status: "D", size: { h: 22.85, w: 30, uom: "cm" }, instock: [ { warehouse: "A", qty: 40 } ] },
{ item: "postcard", status: "A", size: { h: 10, w: 15.25, uom: "cm" }, instock: [ { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ] }
]);

Se você não especificar um documento de projeção, o método db.collection.find() retornará todos os campos nos documentos correspondentes.

O exemplo a seguir retorna todos os campos de todos os documentos da collection inventory em que status é igual a "A":

db.inventory.find( { status: "A" } )

A operação corresponde à seguinte declaração SQL:

SELECT * from inventory WHERE status = "A"

Uma projeção pode incluir explicitamente vários campos configurando o <field> para 1 no documento de projeção. A operação a seguir retorna todos os documentos que correspondem à query. No conjunto de resultados, somente os campos item, status e, por padrão, os campos _id retornam nos documentos correspondentes.

db.inventory.find( { status: "A" }, { item: 1, status: 1 } )

A operação corresponde à seguinte declaração SQL:

SELECT _id, item, status from inventory WHERE status = "A"

Você pode remover o campo _id dos resultados definindo-o como 0 na projeção, como no exemplo a seguir:

db.inventory.find( { status: "A" }, { item: 1, status: 1, _id: 0 } )

A operação corresponde à seguinte declaração SQL:

SELECT item, status from inventory WHERE status = "A"

Observação

Com exceção do campo _id, você não pode combinar declarações de inclusão e exclusão em documentos de projeção.

Em vez de listar os campos para retornar no documento correspondente, você pode usar uma projeção para excluir campos específicos. O exemplo a seguir retorna todos os campos, exceto os campos status e instock nos documentos correspondentes:

db.inventory.find( { status: "A" }, { status: 0, instock: 0 } )

Observação

Com exceção do campo _id, você não pode combinar declarações de inclusão e exclusão em documentos de projeção.

Você pode retornar campos específicos de um documento incorporado. Use a notação de ponto para se referir ao campo incorporado e defina como 1 no documento de projeção.

O exemplo a seguir retorna:

  • O campo _id (retornado por padrão),

  • O campo item,

  • O campo status,

  • O campo uom do documento size.

O campo uom permanece incorporado no documento size.

db.inventory.find(
{ status: "A" },
{ item: 1, status: 1, "size.uom": 1 }
)

Você também pode especificar campos incorporados usando o formulário aninhado. Por exemplo, { item: 1, status: 1, size: { uom: 1 } }.

Você pode suprimir campos específicos de um documento incorporado. Use a notação de ponto para fazer referência ao campo incorporado no documento de projeção e defina como 0.

O exemplo a seguir especifica uma projeção para excluir o campo uom dentro do documento size. Todos os outros campos são retornados nos documentos correspondentes:

db.inventory.find(
{ status: "A" },
{ "size.uom": 0 }
)

Você também pode especificar campos incorporados usando o formulário aninhado. Por exemplo, { size: { uom: 0 } }.

Use a notação de pontos para projetar campos específicos dentro de documentos incorporados em uma array.

O exemplo a seguir especifica uma projeção para retornar:

  • O campo _id (retornado por padrão),

  • O campo item,

  • O campo status,

  • O campo qty nos documentos incorporados na array instock.

db.inventory.find( { status: "A" }, { item: 1, status: 1, "instock.qty": 1 } )

Para campos com arrays, o MongoDB fornece os seguintes operadores de projeções para manipular arrays: $elemMatch, $slice e $.

O exemplo a seguir utiliza o operador de projeção $slice para retornar o último elemento na matriz instock:

db.inventory.find( { status: "A" }, { item: 1, status: 1, instock: { $slice: -1 } } )

$elemMatch, $slice e $ são a única maneira de projetar elementos específicos para incluir na array retornada. Por exemplo, você não pode projetar elementos de array específicos utilizando o índice de array; por exemplo, A projeção do { "instock.0": 1 } não projetará a array com o primeiro elemento.

Você pode especificar expressões de aggregation em uma projeção de query. Expressões de aggregation permitem projetar novos campos e modificar os valores dos campos existentes.

Por exemplo, a operação abaixo usa expressões de aggregation para substituir o valor do campo status e projetar novos campos area e reportNumber.

Observação

O exemplo a seguir usa a sintaxe do MongoDB Shell . Para obter exemplos de driver de projeção com agregação, consulte a documentação do driver.

db.inventory.find(
{ },
{
_id: 0,
item: 1,
status: {
$switch: {
branches: [
{
case: { $eq: [ "$status", "A" ] },
then: "Available"
},
{
case: { $eq: [ "$status", "D" ] },
then: "Discontinued"
},
],
default: "No status found"
}
},
area: {
$concat: [
{ $toString: { $multiply: [ "$size.h", "$size.w" ] } },
" ",
"$size.uom"
]
},
reportNumber: { $literal: 1 }
}
)
[
{
item: 'journal',
status: 'Available',
area: '294 cm',
reportNumber: 1
},
{
item: 'planner',
status: 'Discontinued',
area: '685.5 cm',
reportNumber: 1
},
{
item: 'notebook',
status: 'Available',
area: '93.5 in',
reportNumber: 1
},
{
item: 'paper',
status: 'Discontinued',
area: '93.5 in',
reportNumber: 1
},
{
item: 'postcard',
status: 'Available',
area: '152.5 cm',
reportNumber: 1
}
]
  • Quando você usa um estágio de agregação $project, ele normalmente deve ser o último estágio do seu pipeline, usado para especificar quais campos devem ser retornados ao cliente.

    É improvável que o uso de um estágio $project no início ou no meio de um pipeline para reduzir o número de campos passados para estágios subsequentes melhore o desempenho, pois o banco de dados executa essa otimização automaticamente.

  • O MongoDB impõe restrições adicionais em relação às projeções. Consulte Restrições de Projeção para detalhes.