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

$setField (operador de expressão )

$setField

Novidade na versão 5.0.

Adiciona, atualiza ou remove um campo especificado em um documento.

Você pode usar para adicionar, atualizar ou remover campos com nomes que contenham $setField pontos. () ou começar com cifrões de dólar$ ().

Não confie em nomes de campo com prefixo de dólar de nível raiz que colidem com nomes de campo de metadados internos reservados, pois esses campos podem ser descartados ou inacessíveis em alguns contextos de processamento de query. Para restrições e orientações sobre nomes de campo que contêm cifrões ($) ou pontos (.), consulte Nomes de campo com pontos e cifrões.

Dica

Use para recuperar os valores de campos que contêm $getField cifrões$ () ou pontos. () que você adiciona ou atualiza $setField com.

$setField tem a seguinte sintaxe:

{
$setField: {
field: <String>,
input: <Object>,
value: <Expression>
}
}

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.

value

Expressão

O valor que você deseja atribuir a field. value pode ser qualquer expressãoválida.

Defina como $$REMOVE para remover field do documento input.

  • Se input avaliar missing para, undefined nullou, $setField gera null e não input atualiza.

  • Se for input avaliado como algo diferente de um objeto,, missing undefined nullou, retornará um$setField erro.

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

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

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

  • $unsetField é um alias para com um valor de $setField entrada $$REMOVE de. As seguintes expressões são equivalentes:

    {
    $setField: {
    field: <field name>,
    input: “$$ROOT”,
    value: "$$REMOVE"
    }
    }
    {
    $unsetField: {
    field: <field name>,
    input: “$$ROOT”
    }
    }

Considere uma coleção inventory com os seguintes documentos:

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

A operação a seguir usa a $replaceWith etapa do pipeline e o operador para adicionar um novo campo a cada $setField documento,. "price.usd" O valor de "price.usd" é igual ao valor de "price" em cada documento. Finalmente, a operação utiliza o $unset estágio do pipeline para remover o "price" campo.

db.inventory.aggregate( [
{ $replaceWith: {
$setField: {
field: "price.usd",
input: "$$ROOT",
value: "$price"
} } },
{ $unset: "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 }
]

Considere uma coleção inventory com os seguintes documentos:

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

A operação a seguir usa o $replaceWith estágio de pipeline e os operadores $setField e para adicionar um novo campo a cada documento,.$literal "$price" O valor de "$price" é igual ao valor de "price" em cada documento. Por fim, a operação usa o $unset estágio do pipeline para remover o "price" campo.

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

A operação retorna os seguintes resultados:

[
{ _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 }
]

Considere uma coleção inventory com os seguintes documentos:

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 }
] )

A operação a seguir utiliza o $match estágio de pipeline para encontrar um documento específico e o $replaceWith estágio de pipeline e o operador para atualizar $setField o "price.usd" campo no documento correspondente:

db.inventory.aggregate( [
{ $match: { _id: 1 } },
{ $replaceWith: {
$setField: {
field: "price.usd",
input: "$$ROOT",
value: 49.99
} } }
] )

A operação retorna os seguintes resultados:

[
{ _id: 1, item: 'sweatshirt', qty: 300, 'price.usd': 49.99 }
]

Considere uma coleção inventory com os seguintes documentos:

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 }
] )

A operação a seguir utiliza a $match etapa de pipeline para localizar um documento específico e a $replaceWith etapa de pipeline e os operadores $setField $literal e para atualizar o "$price" campo no documento correspondente:

db.inventory.aggregate( [
{ $match: { _id: 1 } },
{ $replaceWith: {
$setField: {
field: { $literal: "$price" },
input: "$$ROOT",
value: 49.99
} } }
] )

A operação retorna os seguintes resultados:

[
{ _id: 1, item: 'sweatshirt', qty: 300, '$price': 49.99 }
]

Considere uma coleção inventory com os seguintes documentos:

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 }
] )

A seguinte operação utiliza o $replaceWith estágio do pipeline e o $setField operador e para remover $$REMOVE o "price.usd" campo de cada documento:

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

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 }
]

Uma query semelhante escrita utilizando o nome alternativo $unsetField retorna os mesmos resultados:

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

Considere uma coleção inventory com os seguintes documentos:

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 }
] )

A operação a seguir usa o $replaceWith estágio de $setField pipeline,$literal os operadores e, e para remover $$REMOVE o "$price" campo de cada documento:

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

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 }
]

Uma query semelhante escrita utilizando o nome alternativo $unsetField retorna os mesmos resultados:

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