Overview
En esta guía, puede aprender cómo actualizar matrices en un documento con el controlador MongoDB Kotlin.
Para actualizar una matriz, debe hacer lo siguiente:
Especifique la actualización que desea realizar
Especifique a qué elementos de la matriz aplicar su actualización
Realice una operación de actualización utilizando estas especificaciones
Documento de muestra
Las siguientes secciones presentan ejemplos que actualizan este documento de muestra:
{ "_id": 1, "color": "green", "qty": [8, 12, 18] }
Estos datos se modelan con la siguiente clase de datos Kotlin:
data class PaintOrder( val id: Int, val qty: List<Int>, val color: String )
Los ejemplos de esta página utilizan 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 la actualización. Para más información sobre el método findOneAndUpdate(), consulte nuestra
Guía de operaciones compuestas.
Especificación de una actualización
Para especificar una actualización, utilice el constructor Updates. El constructor Updates proporciona métodos de utilidad estáticos para construir especificaciones de actualización.
Para obtener más información sobre el uso del Updates generador con matrices, consulte nuestra guía sobre el generador de actualizaciones.
El siguiente ejemplo realiza estas acciones:
Consulta del documento de muestra
Agregue "17" a la matriz
qtyen el documento que coincida con el filtro de consulta
val filter = Filters.eq("_id", 1) val update = Updates.push(PaintOrder::qty.name, 17) val options = FindOneAndUpdateOptions() .returnDocument(ReturnDocument.AFTER) val result = collection.findOneAndUpdate(filter, update, options) print(result)
PaintOrder(id=1, qty=[8, 12, 18, 17], color=green)
Especificación de elementos de matriz
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 de la matriz
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:
Consulta de un documento con un campo
qtyque contiene el valor "18"Disminuye el primer valor de la matriz en el documento que coincida con el filtro de consulta en "3"
val filter = Filters.eq(PaintOrder::qty.name, 18) val update = Updates.inc("${PaintOrder::qty.name}.$", -3) val options = FindOneAndUpdateOptions() .returnDocument(ReturnDocument.AFTER) val result = collection.findOneAndUpdate(filter, update, options) print(result)
PaintOrder(id=1, qty=[8, 12, 15], color=green)
Para obtener más información sobre los métodos y operadores mencionados en esta sección, consulte los siguientes recursos:
Entrada manual del servidor del operadorposicional $
Cª() Documentación de la API
Coincidencia de todos los elementos del arreglo
Para actualizar todos los elementos de una matriz, utilice el operador posicional $[].
Ejemplo
El siguiente ejemplo realiza estas acciones:
Consulta del documento de muestra
Multiplica los elementos de la matriz que coinciden con el filtro de consulta por "2"
val filter = Filters.eq("_id", 1) val update = Updates.mul("${PaintOrder::qty.name}.$[]", 2) val options = FindOneAndUpdateOptions() .returnDocument(ReturnDocument.AFTER) val result = collection.findOneAndUpdate(filter, update, options) println(result)
PaintOrder(id=1, qty=[16, 24, 36], color=green)
Para obtener más información sobre los métodos y operadores mencionados en esta sección, consulte los siguientes recursos:
Entrada manual del servidor deloperador posicional $[]
Documentación de la APImul()
Coincidencia de múltiples elementos de una matriz
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.
<identifier> es el nombre que le asignas al filtro de matriz. Este valor debe empezar con una letra minúscula y contener solo caracteres alfanuméricos.
Ejemplo
El siguiente ejemplo realiza estas acciones:
Consulta del documento de muestra
Establezca un filtro de matriz para buscar valores menores que "15"
Incrementar los elementos de la matriz que coinciden con el filtro de consulta en "5"
val filter = Filters.eq("_id", 1) val smallerFilter = Filters.lt("smaller", 15) val options = FindOneAndUpdateOptions() .returnDocument(ReturnDocument.AFTER) .arrayFilters(listOf(smallerFilter)) val update = Updates.inc("${PaintOrder::qty.name}.$[smaller]", 5) val result = collection.findOneAndUpdate(filter, update, options) println(result)
PaintOrder(id=1, qty=[13, 17, 18], color=green)
Para obtener más información sobre los métodos y operadores mencionados en esta sección, consulte los siguientes recursos: