MongoDB – Operador Posicional ($)

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() y db.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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *