Menu Docs

Página inicial do DocsGo

Atualizar Matrizes em um Documento

Nesta página

  • Visão geral
  • Dados de amostra
  • Especificar Elementos de Matriz
  • Primeiro elemento de array
  • Vários elementos de array
  • Todos os elementos de array
  • Informações adicionais
  • Documentação da API

Neste guia, você pode aprender como atualizar os elementos de array em um documento.

Para atualizar elementos em uma matriz, execute as seguintes ações:

  • Forneça um documento de atualização que especifique a atualização.

  • Especifique quais elementos de array atualizar.

  • Execute a atualização utilizando uma operação de atualização com estas especificações.

Para executar os exemplos neste guia, carregue os dados de amostra na collection quantity.tea com o seguinte trecho:

coll := client.Database("tea").Collection("quantity")
docs := []interface{}{
bson.D{{"type", "Masala"}, {"qty", bson.A{15, 12, 18}}},
}
result, err := coll.InsertMany(context.TODO(), docs)
if err != nil {
panic(err)
}
fmt.Printf("%d documents inserted with IDs:\n", len(result.InsertedIDs))

Dica

Bancos de Dados e Coleções Inexistentes

Se o banco de dados e a collection necessários não existirem quando você executar uma operação de escrita, o servidor implicitamente os criará.

Os exemplos seguintes utilizam o método FindOneAndUpdate() para recuperar e atualizar um documento e retornar o estado do documento após a atualização ocorrer. Se você deseja atualizar vários documentos com um campo de matriz, utilize o método UpdateMany().

Observação

Cada exemplo trunca o valor ObjectID porque o driver o gera exclusivamente.

Para especificar quais elementos da matriz devem ser atualizados, use um operador posicional. Os operadores posicionais podem especificar o primeiro, vários ou todos os elementos da matriz a serem atualizados.

Para especificar elementos de matriz com um operador posicional, utilize notação de ponto. A notação de ponto é uma sintaxe de acesso à propriedade para navegar pelos elementos e campos da matriz de um documento incorporado.

Para atualizar o primeiro elemento de matriz que corresponde ao seu filtro de consulta, utilize o operador $ posicional. O filtro de consulta deve ser para o campo de matriz.

Este exemplo executa as seguintes ações:

  • Corresponde aos elementos de matriz em qty onde o valor é maior que 10.

  • Diminui o primeiro valor da matriz correspondente a 5.

filter := bson.D{{"qty", bson.D{{"$gt", 10}}}}
update := bson.D{{"$inc", bson.D{{"qty.$", -5}}}}
opts := options.FindOneAndUpdate().SetReturnDocument(options.After)
var updatedDoc bson.D
err := coll.FindOneAndUpdate(context.TODO(), filter, update, opts).Decode(&updatedDoc)
if err != nil {
panic(err)
}
fmt.Println(updatedDoc)

Observação

O filtro de consulta corresponde aos valores 15 e 12. Como 15 é o primeiro elemento correspondido, ele é atualizado. Se você quiser atualizar ambos os valores correspondentes, consulte Vários elementos de matriz.

Para atualizar vários elementos de matriz que correspondam à sua consulta de filtro, use o operador $[<identifier>] posicional filtrado. Você deve incluir um filtro de matriz em sua operação de atualização para especificar quais elementos de matriz devem ser atualizados.

O <identifier> é o nome que você utiliza dentro do filtro de matriz. Esse valor deve começar com uma letra minúscula e conter apenas caracteres alfanuméricos.

Este exemplo executa as seguintes ações:

  • Cria um filtro de matriz com um identificador chamado smaller para corresponder a elementos menores que 18.

  • Aplica o filtro de matriz utilizando o método SetArrayFilters().

  • Aumenta cada elemento correspondente em 7.

identifier := []interface{}{bson.D{{"smaller", bson.D{{"$lt", 18}}}}}
update := bson.D{{"$inc", bson.D{{"qty.$[smaller]", 7}}}}
opts := options.FindOneAndUpdate().SetArrayFilters(options.ArrayFilters{Filters: identifier}).SetReturnDocument(options.After)
var updatedDoc bson.D
err := coll.FindOneAndUpdate(context.TODO(), bson.D{}, update, opts).Decode(&updatedDoc)
if err != nil {
panic(err)
}
fmt.Println(updatedDoc)

Para atualizar todos os elementos da matriz, use o operador $[] posicional.

Observação

Se você especificar um filtro de query para o campo de array, o operador posicional $[] ignorará o filtro de query e atualizará todos os elementos de array.

Este exemplo multiplica todos os elementos de matriz em qty por 2:

update := bson.D{{"$mul", bson.D{{"qty.$[]", 2}}}}
opts := options.FindOneAndUpdate().SetReturnDocument(options.After)
var updatedDoc bson.D
err := coll.FindOneAndUpdate(context.TODO(), bson.D{}, update, opts).Decode(&updatedDoc)
if err != nil {
panic(err)
}
fmt.Println(updatedDoc)

Para saber mais sobre as operações abordadas neste guia, consulte os seguintes guias:

Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API:

←  Alterar um documentoInserir ou atualizar em uma única operação →
Dê Feedback
© 2022 MongoDB, Inc.

Sobre

© 2022 MongoDB, Inc.