Visão geral
Neste guia, você pode aprender como usar o driver Rust para atualizar campos de array em documentos MongoDB .
Para atualizar uma array em um documento, você pode usar um operador de atualização e um operador posicional. Os operadores de atualização especificam o tipo de atualização a ser executada e os operadores posicionais especificam qual elemento da array atualizar.
Dados de amostra
Os exemplos deste guia usam os seguintes documentos de exemplo na collection students:
{ "_id": 1, "student": "Kai Ling", "test_scores": [88, 62, 73] }, { "_id": 2, "student": "Francesca Miao", "test_scores": [95, 45, 67] }
Operador posicional
Use o operador posicional $ para atualizar o primeiro elemento de array que corresponde ao seu filtro de query. O operador $ representa a posição do primeiro elemento correspondente na array.
O exemplo a seguir usa o método update_one() para localizar um documento no qual a array test_scores contém o valor 62. O exemplo então usa o operador posicional para atualizar o primeiro elemento correspondente de 62 para 65:
let filter = doc! { "test_scores": 62 }; let update = doc! { "$set": { "test_scores.$": 65 } }; let res = my_coll .update_one(filter, update) .await?; println!("Modified documents: {}", res.modified_count);
Modified documents: 1
O documento a seguir reflete as alterações resultantes da operação de atualização anterior:
{ "_id": 1, "student": "Kai Ling", "test_scores": [88, 65, 73] }
Todos os Operadores Posicionais
Use o operador posicional all $[] para atualizar todos os elementos em um campo de array. O operador $[] indica que a atualização se aplica a todos os elementos da array.
O exemplo a seguir usa o método update_one() para localizar o documento no qual o valor do campo student é "Kai Ling". Em seguida, o exemplo usa o operador posicional all para incrementar cada valor na array test_scores em 5:
let filter = doc! { "student": "Kai Ling" }; let update = doc! { "$inc": { "test_scores.$[]": 5 } }; let res = my_coll .update_one(filter, update) .await?; println!("Modified documents: {}", res.modified_count);
Modified documents: 1
A operação de atualização anterior resulta em um documento semelhante ao seguinte:
{ "_id": 1, "student": "Kai Ling", "test_scores": [93, 67, 78] }
Operador posicional filtrado
Use o operador posicional filtrado $[<identifier>] para atualizar todos os elementos de array que correspondem a um filtro de array. Um filtro de array é um documento que especifica quais elementos de array atualizar. Defina como um <identifier> nome de espaço reservado que você faça referência no filtro de matriz.
Para usar o operador posicional filtrado, encadeie o método array_filters() à sua chamada de método de atualização e passe uma array de documentos de filtro.
O exemplo seguinte utiliza o método update_many() para localizar todos os documentos na collection students. Em seguida, o exemplo usa o operador posicional filtrado para adicionar pontos 8 a todos os valores test_scores que são menores que 70:
let filter = doc! {}; let update = doc! { "$inc": { "test_scores.$[score]": 8 } }; let res = my_coll .update_many(filter, update) .array_filters(vec![doc! { "score": { "$lt": 70 } }]) .await?; println!("Modified documents: {}", res.modified_count);
Modified documents: 2
A operação de atualização anterior resulta em documentos semelhantes aos seguintes:
{ "_id": 1, "student": "Kai Ling", "test_scores": [88, 70, 73] }, { "_id": 2, "student": "Francesca Miao", "test_scores": [95, 53, 75] }
Informações adicionais
Para obter mais informações sobre os conceitos deste guia, consulte a seguinte documentação:
Atualizar guiade documentos
Para saber mais sobre os operadores mencionados neste guia, consulte a seguinte documentação manual do MongoDB Server :
Documentação da API
Para saber mais sobre os métodos e tipos mencionados neste guia, consulte a documentação da API abaixo: