sql >> Base de Datos >  >> NoSQL >> MongoDB

DeprecationWarning:collection.findAndModify está en desuso. ¿Usar findOneAndUpdate, findOneAndReplace o findOneAndDelete en su lugar?

Debe configurar la opción en la consulta useFindAndModify a false , como se menciona en los documentos.

(palabra clave de búsqueda Las opciones admitidas actualmente son )

'useFindAndModify':verdadero por defecto. Establézcalo en falso para makefindOneAndUpdate() y findOneAndRemove() use nativefindOneAndUpdate() en lugar de findAndModify().

y si ve el archivo de definición de mangosta, donde se menciona que llama al comando de actualización findAndModify.

 /**
  * Issues a mongodb findAndModify update command.
  * Finds a matching document, updates it according to the update arg, 
    passing any options,
  * and returns the found document (if any) to the callback. The query 
    executes immediately
  * if callback is passed else a Query object is returned.
  */
 findOneAndUpdate(): DocumentQuery<T | null, T>;

Actualizado recientemente en los documentos de mongoose (haga clic aquí) para estos desuso donde se menciona:

La función findOneAndUpdate() de Mongoose es anterior a la función findOneAndUpdate() del controlador MongoDB, por lo que utiliza la función findAndModify() del controlador MongoDB en su lugar.

Hay tres formas o más de evitar el uso de FindAndModify :

  1. A nivel global:establezca la opción en falso.
// Make Mongoose use `findOneAndUpdate()`. Note that this option is `true`
// by default, you need to set it to false.
mongoose.set('useFindAndModify', false);
  1. A nivel de conexión:podemos configurar mediante las opciones de conexión:
    mongoose.connect(uri, { useFindAndModify: false });
  1. En el nivel de consulta:
   await ModelName.findOneAndUpdate({matchQuery},
   {$set: updateData}, {useFindAndModify: false});