Overview
En esta guía, puedes aprender cómo actualizar arreglos en un documento con el controlador Java de MongoDB.
Para actualizar un arreglo, debe hacer lo siguiente:
Especifique la actualización que desea realizar
Especifica a qué elementos de arreglo se debe aplicar la actualización.
Realiza una operación de actualización usando estas especificaciones
Documento de muestra
Las siguientes secciones incluyen ejemplos que actualizan este documento de muestra:
{ "_id": 1, "color": "green", "qty": [8, 12, 18] }
Los ejemplos en esta página usan el findOneAndUpdate() método de la clase MongoCollection para recuperar y actualizar el documento. Cada ejemplo utiliza una instancia de la clase FindOneAndUpdateOptions para que MongoDB recupere el documento después de que se produzca la actualización. Para obtener más información sobre el método findOneAndUpdate(), consulta nuestra
Guía de operaciones compuestas.
Especificación de una actualización
Para especificar una actualización, utilice el Updates constructor. El Updates constructor proporciona métodos de utilidad estáticos para construir especificaciones de actualización. Para obtener más información sobre el uso del Updates constructor con matrices, consulte nuestra guía sobre el constructor de actualizaciones.
El siguiente ejemplo realiza estas acciones:
query para el documento de muestra
Agregue "17" a la matriz
qtyen el documento que coincide con el filtro de consulta
Bson filter = Filters.eq("_id", 1); Bson update = Updates.push("qty", 17); // Defines options that configure the operation to return a document in its post-operation state FindOneAndUpdateOptions options = new FindOneAndUpdateOptions() .returnDocument(ReturnDocument.AFTER); // Updates the first document that matches the filter and prints the updated document as JSON Document result = collection.findOneAndUpdate(filter, update, options); System.out.println(result.toJson());
El ejemplo precedente actualiza el documento original al siguiente estado:
{ "_id": 1, "color": "green", "qty": [8, 12, 18, 17] }
Especificación de elementos del arreglo
Se puede especificar cuáles elementos de un arreglo actualizar usando un operador posicional. Los operadores posicionales pueden especificar el primer, todos o ciertos elementos del arreglo para actualizar.
Para especificar elementos en un arreglo con operadores posicionales, utiliza la notación de puntos. La notación de puntos es una sintaxis de acceso a propiedades para navegar objetos BSON.
Para obtener información adicional, consulte la entrada del Manual del servidor en notación de puntos.
El primer elemento coincidente del arreglo
Para actualizar el primer elemento de la matriz que coincida con el filtro de consulta, utilice el operador posicional $. El campo de la matriz debe aparecer como parte del filtro de consulta para poder utilizar el operador posicional $.
Ejemplo
El siguiente ejemplo realiza estas acciones:
Query por un documento con un campo
qtyque contenga el valor "18"Decrementa el primer valor del arreglo en el documento que coincida con el filtro de query en “3”
Bson filter = Filters.eq("qty", 18); Bson update = Updates.inc("qty.$", -3); // Defines options that configure the operation to return a document in its post-operation state FindOneAndUpdateOptions options = new FindOneAndUpdateOptions() .returnDocument(ReturnDocument.AFTER); // Updates the first document that matches the filter and prints the updated document as JSON Document result = collection.findOneAndUpdate(filter, update, options); System.out.println(result.toJson());
El ejemplo precedente actualiza el documento original al siguiente estado:
{ "_id": 1, "color": "green", "qty": [8, 12, 15] }
Para obtener más información sobre los métodos y operadores mencionados en esta sección, consulte los siguientes recursos:
Operador Posicional $ Entrada manual del servidor
inc() Documentación de la API
Coincidencia de todos los elementos del arreglo
Para actualizar todos los elementos en un arreglo, use el operador posicional all $[].
Ejemplo
El siguiente ejemplo realiza estas acciones:
query para el documento de muestra
Multiplicar los elementos del arreglo que coincidan con el filtro de query por "2"
Bson filter = Filters.eq("_id", 1); Bson update = Updates.mul("qty.$[]", 2); // Defines options that configure the operation to return a document in its post-operation state FindOneAndUpdateOptions options = new FindOneAndUpdateOptions() .returnDocument(ReturnDocument.AFTER); // Updates the first document that matches the filter and prints the updated document as JSON Document result = collection.findOneAndUpdate(filter, update, options); System.out.println(result.toJson());
El ejemplo precedente actualiza el documento original al siguiente estado:
{ "_id": 1, "color": "green", "qty": [16, 24, 36] }
Para obtener más información sobre los métodos y operadores mencionados en esta sección, consulte los siguientes recursos:
Todos los operadores posicionales $[] Registro de manual del servidor
Documentación de la API mul()
Coincidencia de varios elementos de arreglo
Para actualizar los elementos de una matriz que coinciden con un filtro, utilice el operador posicional filtrado $[<identifier>]. Debe incluir un filtro de matriz en la operación de actualización para especificar qué elementos de la matriz actualizar.
El <identifier> es el nombre que se le da al filtro de arreglo. Este valor debe comenzar con una letra minúscula y contener solo caracteres alfanuméricos.
Ejemplo
El siguiente ejemplo realiza estas acciones:
query para el documento de muestra
Establezca un filtro de matriz para buscar valores menores a "15"
Incrementar los elementos del arreglo que coincidan con el filtro de query en "5"
Bson filter = Filters.eq("_id", 1); Bson smallerFilter = Filters.lt("smaller", 15); // Defines options that configure the document's return state and apply the array value filter FindOneAndUpdateOptions options = new FindOneAndUpdateOptions() .returnDocument(ReturnDocument.AFTER) .arrayFilters(Arrays.asList(smallerFilter)); // Creates an update document to increase the matched array values by "5" Bson update = Updates.inc("qty.$[smaller]", 5); // Updates the first document that matches the filter and prints the updated document as JSON Document result = collection.findOneAndUpdate(filter, update, options); System.out.println(result.toJson());
El ejemplo precedente actualiza el documento original al siguiente estado:
{ "_id": 1, "color": "green", "qty": [13, 17, 18] }
Para obtener más información sobre los métodos y operadores mencionados en esta sección, consulte los siguientes recursos:
Operador Posicional Filtrado $[]<identifier> Entrada del Manual del Servidor
Documentación API inc()