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

$unsetField (agregação)

Nesta página

  • Definição
  • Sintaxe
  • Comportamento
  • Exemplos
$unsetField

Novidades na versão 5.0.

Remove um campo especificado em um documento.

Você pode usar $unsetField para remover campos com nomes que contenham pontos (.) ou que comecem com cifrões ($).

$unsetField é um alias para $setField que usa $$REMOVE para remover campos.

$unsetField tem a seguinte sintaxe:

{
$unsetField: {
field: <String>,
input: <Object>,
}
}

Você deve fornecer os seguintes campos:

Campo
Tipo
Descrição
field
String
Campo no objeto input que você deseja adicionar, atualizar ou remover. field pode ser qualquer expressão válida que resulte em uma constante de string.
input
Objeto
Documento que contém o field que você deseja adicionar ou atualizar. input deve determinar um objeto, missing, null ou undefined.
  • Se input for avaliado como missing, undefined ou null, $unsetField retornará null e não atualizará input.

  • Se input for avaliado como algo diferente de um objeto, missing, undefined ou null, $unsetField retornará um erro.

  • Se field resolver para algo diferente de uma constante de string, $unsetField retornará um erro.

  • Se field não existir em input, $unsetField adiciona-o.

  • $unsetField não atravessa implicitamente objetos ou arrays. Por exemplo, $unsetField avalia um valor field de "a.b.c" como um campo de nível superior "a.b.c" em vez de um campo aninhado, { "a": { "b": { "c": } } }.

Considere a coleção de inventário:

db.inventory.insertMany( [
{ _id: 1, item: "sweatshirt", qty: 300, "price.usd": 45.99 },
{ _id: 2, item: "winter coat", qty: 200, "price.usd": 499.99 },
{ _id: 3, item: "sun dress", qty: 250, "price.usd": 199.99 },
{ _id: 4, item: "leather boots", qty: 300, "price.usd": 249.99 },
{ _id: 5, item: "bow tie", qty: 180, "price.usd": 9.99 }
] )

Use o estágio de pipeline $replaceWith e o operador $unsetField para remover o campo "price.usd" de cada documento:

db.inventory.aggregate( [
{ $replaceWith: {
$unsetField: {
field: "price.usd",
input: "$$ROOT"
} } }
] )

A operação retorna os seguintes resultados:

[
{ _id: 1, item: 'sweatshirt', qty: 300 },
{ _id: 2, item: 'winter coat', qty: 200 },
{ _id: 3, item: 'sun dress', qty: 250 },
{ _id: 4, item: 'leather boots', qty: 300 },
{ _id: 5, item: 'bow tie', qty: 180 }
]

Considere a coleção de inventário:

db.inventory.insertMany( [
{ _id: 1, item: "sweatshirt", qty: 300, "$price": 45.99 },
{ _id: 2, item: "winter coat", qty: 200, "$price": 499.99 },
{ _id: 3, item: "sun dress", qty: 250, "$price": 199.99 },
{ _id: 4, item: "leather boots", qty: 300, "$price": 249.99 },
{ _id: 5, item: "bow tie", qty: 180, "$price": 9.99 }
] )

Use o estágio de pipeline $replaceWith com os operadores $unsetField e $literal para remover o campo "$price" de cada documento:

db.inventory.aggregate( [
{ $replaceWith: {
$unsetField: {
field: { $literal: "$price" },
input: "$$ROOT"
} } }
] )

A operação retorna os seguintes resultados:

[
{ _id: 1, item: 'sweatshirt', qty: 300 },
{ _id: 2, item: 'winter coat', qty: 200 },
{ _id: 3, item: 'sun dress', qty: 250 },
{ _id: 4, item: 'leather boots', qty: 300 },
{ _id: 5, item: 'bow tie', qty: 180 }
]

Considere a coleção de inventário:

db.inventory.insertMany( [
{ _id: 1, item: "sweatshirt", qty: 300, "price": {"usd":45.99, "euro": 38.77 } },
{ _id: 2, item: "winter coat", qty: 200, "price": { "usd": 499.99, "euro": 420.51 } },
{ _id: 3, item: "sun dress", qty: 250, "price": { "usd": 199.99, "euro": 167.70 } },
{ _id: 4, item: "leather boots", qty: 300, "price": { "usd": 249.99, "euro": 210.68 } },
{ _id: 5, item: "bow tie", qty: 180, "price": { "usd": 9.99, "euro": 8.42 } }
] )

O campo "price" contém um documento com dois subcampos, "usd" e "euro". Você não pode usar "price.euro" para identificar e remover "euro" porque o MongoDB analisa "price.euro" como um nome de campo de nível superior que por acaso contém um ponto (.).

Use o estágio do pipeline $replaceWith com $setField e uma operação $unsetField aninhada para remover o campo "euro" :

db.inventory.aggregate( [
{ $replaceWith: {
$setField: {
field: "price",
input: "$$ROOT",
value: {
$unsetField: {
field: "euro",
input: { $getField: "price" }
} } } } }
] )

A operação retorna os seguintes resultados:

[
{ _id: 1, item: "sweatshirt", qty: 300, price: { usd: 45.99 } },
{ _id: 2, item: "winter coat", qty: 200, price: { usd: 499.99 } },
{ _id: 3, item: "sun dress", qty: 250, price: { usd: 199.99 } },
{ _id: 4, item: "leather boots", qty: 300, price: { usd: 249.99 } },
{ _id: 5, item: "bow tie", qty: 180, price: { usd: 9.99 } }
]

Dica

Veja também:

← $type (agregação)