MongoDB – Método FindAndModify()

El método findAndModify() modifica y devuelve un solo documento que coincide con los criterios dados. De forma predeterminada, este método devuelve un documento de modificación previa. Para devolver el documento con las modificaciones realizadas en la actualización, utilice la nueva opción y establezca su valor en verdadero. Toma un documento como parámetro.

  • Si desea buscar campos del documento incrustado, utilice la siguiente sintaxis:

“campo.nombre de campo anidado”: ​​<valor>

o

{campo: {nombre de campo anidado: <valor>}}

  • El documento devuelto por este método siempre contiene el campo _id. Si no desea el campo _id, establezca _id:0 en la proyección.
  • Puede utilizar este método en transacciones de varios documentos.
  • Si usa este método, en una colección compartida, la expresión de consulta debe contener una condición de igualdad en la clave compartida.

Sintaxis:

db.Collection_name.findAndModify(
{
    selection_criteria:<document>,
    sort: <document>,
    remove: <boolean>,
    update: <document>,
    new: <boolean>,
    fields: <document>,
    upsert: <boolean>,
    bypassDocumentValidation: <boolean>,
    writeConcern: <document>,
    collation: <document>,
    arrayFilters: [ <filterdocument1>, ... ]
})

Parámetros:

  • eliminar: es obligatorio si el campo de actualización no existe. Si es verdadero, elimina el documento seleccionado. El valor predeterminado es falso.
  • actualización: es obligatorio si el campo de eliminación no existe. Realiza una actualización del documento seleccionado. El campo de actualización emplea los mismos operadores de actualización o campo: especificaciones de valor para modificar el documento seleccionado.
  • Otros son opcionales.

Parámetros opcionales:

  • selection_criteria: Especifica los criterios de selección para la modificación. El campo de consulta emplea los mismos selectores de consulta que se utilizan en el método db.collection.find(). Aunque la consulta puede coincidir con varios documentos, findAndModify() solo seleccionará un documento para modificar.
  • ordenar: determina qué documento modificará la operación si la consulta selecciona varios documentos. findAndModify() modificará el primer documento en el orden de clasificación especificado por este argumento.
  • nuevo: cuando es verdadero, devuelve el documento modificado en lugar del original. El método findAndModify() ignora la nueva opción para las operaciones de eliminación. El valor predeterminado es falso.
  • campos: un subconjunto de campos para devolver. El documento de campos especifica la inclusión de un campo con 1, como se muestra a continuación:
fields: { <field1>: 1, <field2>: 1, ... }
  • Upsert: el valor predeterminado de este parámetro es falso. Cuando es cierto, creará un nuevo documento en la colección cuando ningún documento coincida con la condición dada en el método de actualización.
  • writeConcern: solo se usa cuando no desea usar la preocupación de escritura predeterminada. El tipo de este parámetro es un documento.
  • Colación: Especifica el uso de la colación para operaciones. Permite a los usuarios especificar las reglas específicas del idioma para la comparación de strings, como reglas para mayúsculas y minúsculas y acentos. El tipo de este parámetro es un documento.
  • arrayFilters: es una array de documentos de filtro que indica qué elementos de la array modificar para una operación de actualización en un campo de array. El tipo de este parámetro es una array.

Devolver:

  • Devuelve un único documento previo a la modificación. Para devolver el documento con las modificaciones realizadas en la actualización, utilice la nueva opción y establézcala en verdadero.
  • Si no se encuentra ningún documento para un upsert, lo que significa que el comando realiza una inserción, y new es falso, y NO se especifica la opción de clasificación, el método devuelve nulo.
  • Si no se encuentra ningún documento para un upsert, lo que significa que el comando realiza una inserción, y new es falso y se especifica una opción de clasificación, el método devuelve un documento vacío {}.

Ejemplos:

En los siguientes ejemplos, estamos trabajando con:

Base de datos: gfg

Colecciones: estudiante

Documento: tres documentos contienen el nombre, el idioma que usan en la codificación y la puntuación que obtuvieron al resolver el problema en gfg.

  • Estamos aumentando las marcas en 4 cuyo nombre es vishal: 
db.student.findAndModify({query:{name:"vishal"},update:{$inc:{score:4}}})

Aquí, estamos aumentando el valor del campo de marcas del documento cuyo nombre es «vishal» utilizando el método findAndModify(). Este método devuelve el documento previo a la modificación.

Nota: el operador $inc aumenta el valor en la puntuación.

Despúes de actualizar:

  • Obtener un documento modificado:
 db.student.findAndModify({query:{name:"vishal"},
                          update:{$inc:{score:4}},new:true})

Aquí, estamos aumentando nuevamente el valor del campo de puntuación en 4 del documento cuyo nombre es «vishal», pero esta vez establecemos el valor de nuevo en verdadero, y el método findAndModify() devuelve el documento modificado.

Despúes de actualizar:

Publicación traducida automáticamente

Artículo escrito por nikhilchhipa9 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 *