MongoDB proporciona diferentes tipos de operadores de actualización de array para actualizar los valores de los campos de array en los documentos y el operador posicional ( $ ) es uno de ellos. Este operador reconoce un elemento en una array para actualizar sin especificar explícitamente la posición de ese elemento en la array.
Sintaxis:
{ "<array>.$" : value }
- No puede usar el
$
operador con operaciones upsert. Si usa el operador $con operaciones upsert, la inserción usará $como nombre de campo en el documento insertado. - Este operador no puede usarse para aquellas consultas que atraviesan más de una array porque el reemplazo del
$
marcador de posición es un valor único. - Cuando usa el
$
operador con el operador $unset, entonces el operador $no elimina el elemento coincidente de la array, sino que lo establece en nulo. - Cuando una consulta coincide con la array con la ayuda de operadores de negación como $not, $ne o $nin, no puede usar el
$
operador para actualizar los valores de esa array. Y si la parte negada de la consulta está presente dentro de una expresión $elemMatch, puede usar el$
operador posicional para actualizar este campo. - Cuando utiliza este operador con una operación de actualización como
db.collection.update()
ydb.collection.findAndModify()
, entonces el$
operador funciona como un marcador de posición para el primer elemento que coincide con el documento de consulta y el campo de array debe aparecer como parte del documento de consulta.
En los siguientes ejemplos, estamos trabajando con:
Base de datos: GeeksforGeeks
Colección: colaborador
Documento: dos documentos que contienen los detalles del colaborador en forma de pares de valor de campo.
Actualizar valores en la array usando el $
operador:
En este ejemplo, estamos actualizando el primer elemento cuyo valor es «Python» a «Ruby» en el campo de idioma con la ayuda del $
operador, porque no conocemos la posición del elemento en la array.
db.contributor.updateOne({name: "Rohit", language: "Python"}, {$set: {"language.$": "Ruby"}})
Aquí, el $
operador está trabajando como marcador de posición para la primera coincidencia del documento de consulta de actualización.
Nota: El campo de array debe ser parte de la consulta.
Actualización de documentos en la array usando el $
operador:
En este ejemplo, estamos actualizando una array que contiene documentos incrustados con la ayuda del $
operador y para acceder a los campos de documentos incrustados usamos la notación de puntos. O en otras palabras, estamos actualizando el valor del campo tArtículo de 60 a 100.
db.contributor.updateOne({name: "Rohit", "articles.language": "C#"}, {$set: {"articles.$.tArticles": 100}})
Actualización de documentos incrustados mediante coincidencias de varios campos:
En este ejemplo, estamos actualizando el valor del campo tArtículos en el primer documento incrustado que tiene un campo pArtículos con un valor superior a 90.
db.contributor.updateOne({name: "Sumit", articles: {$elemMatch: {pArticles: {$gt: 30}}}}, {$set: {"articles.$.tArticles": 200}})
Publicación traducida automáticamente
Artículo escrito por ankita_saini y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA