MongoDB con controladores
Esta página documenta a mongosh . Para ver el método equivalente en un driver de MongoDB, se debe consultar la página correspondiente al lenguaje de programación:
Definición
db.collection.findOneAndDelete( filter, options )Elimina un único documento en función de los criterios
filterysort, y devuelve el documento eliminado.El método
findOneAndDelete()tiene la siguiente forma:db.collection.findOneAndDelete( <filter>, { writeConcern: <document>, projection: <document>, sort: <document>, maxTimeMS: <number>, collation: <document> } ) El método
findOneAndDelete()toma los siguientes parámetros:ParameterTipoDescripciónfilterDocumento
Los criterios de selección para la eliminación. Lo mismo Se disponen de selectores de consulta, como en el método
find().Especifique un documento vacío
{ }para eliminar el primer documento devuelto en la colección.Si no se especifica, el valor es por defecto un documento vacío.
Si el argumento del query no es un documento, la operación arroja un error.
writeConcernDocumento
Opcional. Un documento que expresa el nivel de confirmación de escritura. Omite el uso del nivel de confirmación de escritura por defecto.
{ w: <value>, j: <boolean>, wtimeout: <number> } Consulta Borrar un documento utilizando WriteConcern para su uso.
No establezcas explícitamente el nivel de confirmación de escritura para la operación si se ejecuta en una transacción. Para usar el nivel de confirmación de escritura con transacciones, consulta Transacciones y nivel de confirmación de escritura.
projectionDocumento
Opcional. Un subconjunto de campos que se deben devolver.
Para devolver todos los campos en el documento devuelto, omita este parámetro.
Si el argumento de proyección no es un documento, la operación genera un error.
sortDocumento
Opcional. Especifica un orden de clasificación para los documentos que coinciden con el
filter.Si el argumento de orden no es un documento, la operación genera un error.
Consulte
cursor.sort().maxTimeMSNúmero
Opcional. Especifica un límite de tiempo en milisegundos dentro del cual debe completarse la operación. Genera un error si se supera el límite.
collationDocumento
Opcional.
Especifica la intercalación a utilizar para la operación.
La intercalación permite a los usuarios especificar reglas propias del lenguaje para la comparación de strings, como reglas para el uso de mayúsculas y minúsculas y marcas de acento.
La opción de intercalación tiene la siguiente sintaxis:
collation: { locale: <string>, caseLevel: <boolean>, caseFirst: <string>, strength: <int>, numericOrdering: <boolean>, alternate: <string>, maxVariable: <string>, backwards: <boolean> } Al especificar la intercalación, el campo
localees obligatorio; todos los demás campos de intercalación son opcionales. Para las descripciones de los campos, consulta Documento de intercalación.Si no se especifica la intercalación, pero la colección tiene una intercalación por defecto (ver
db.createCollection()), la operación utiliza la intercalación especificada para la colección.Si no se especifica ninguna intercalación para la colección o para las operaciones, MongoDB utiliza la comparación binaria simple usada en versiones anteriores para las comparaciones de strings.
No puedes especificar varias intercalaciones para una operación. Por ejemplo, no puedes especificar diferentes intercalaciones por campo, o si realizas una búsqueda con un ordenamiento, no puedes usar una intercalación para la búsqueda y otra para el ordenamiento.
Devuelve: Devuelve el documento eliminado.
Compatibilidad
Este método está disponible en implementaciones alojadas en los siguientes entornos:
MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube
Nota
Este comando es compatible con todos los clústeres de MongoDB Atlas. Para obtener información sobre el soporte de Atlas para todos los comandos, consulte Comandos no compatibles.
MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB
MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.
Comportamiento
Coincidencia de documento
findOneAndDelete() elimina el primer documento coincidente de la colección que coincide filter con. El sort parámetro permite determinar qué documento se elimina.
Proyección
Importante
Consistencia del lenguaje
Como parte de hacer que la proyección de find() y findAndModify() sea coherente con la etapa de agregación de $project,
Las proyecciones
find()y lafindAndModify()pueden aceptar expresiones y sintaxis de agregación.MongoDB aplica restricciones adicionales con respecto a las proyecciones. Consulta restricciones de proyección para obtener más detalles.
El parámetro projection acepta un documento con el siguiente formato:
{ field1: <value>, field2: <value> ... }
Proyección | Descripción |
|---|---|
| Especifica la inclusión de un campo. Si especificas un entero distinto de cero para el valor de proyección, la operación trata el valor como |
| Especifica la exclusión de un campo. |
| |
| Utiliza los operadores de proyección de arreglos ( No disponible para las vistas. |
| Especifica el valor del campo proyectado. Con el uso de expresiones y sintaxis de agregación, incluido el uso de literales y variables de agregación, se pueden proyectar campos nuevos o proyectar campos existentes con valores nuevos.
|
Especificación de campo embebido
Para campos en documentos incrustados, puedes especificar el campo mediante:
notación de puntos, por ejemplo
"field.nestedfield": <value>formulario anidado, por ejemplo
{ field: { nestedfield: <value> } }
_id Proyección de campo
El campo _id se incluye por defecto en los documentos devueltos, a menos que especifiques explícitamente _id: 0 en la proyección para suprimir el campo.
Inclusión o exclusión
Una projection no puede contener ambas especificaciones de inclusión y exclusión, con la excepción del campo _id:
En las proyecciones que incluyen explícitamente campos, el campo
_ides el único campo que puedes excluir explícitamente.En las proyecciones que excluyen explícitamente campos, el campo
_ides el único campo que puedes incluir explícitamente; sin embargo, el campo_idse incluye por defecto.
Para obtener más información sobre la proyección, consulte también:
Colecciones fragmentadas
Los documentos en una colección particionada pueden carecer de los campos clave de partición. Para dirigirse a un documento que carece de la clave de partición, se puede utilizar la coincidencia exacta null en conjunción con otra condición de filtro (por ejemplo, en el campo _id). Por ejemplo:
{ _id: <value>, <shardkeyfield>: null } // _id of the document missing shard key
Transacciones
db.collection.findOneAndDelete() puede usarse dentro de transacciones distribuidas.
No establezcas explícitamente el nivel de confirmación de escritura para la operación si se ejecuta en una transacción. Para usar el nivel de confirmación de escritura con transacciones, consulta Transacciones y nivel de confirmación de escritura.
Importante
En la mayoría de los casos, una transacción distribuida incurre en un costo de rendimiento mayor que las escrituras de documentos individuales, y la disponibilidad de transacciones distribuidas no debería ser un sustituto para un diseño de esquema efectivo. Para muchos casos, el modelo de datos desnormalizado (documento incrustado y matrices) seguirá siendo óptimo para tus datos y casos de uso. Es decir, en muchos casos, modelar tus datos de forma adecuada minimizará la necesidad de transacciones distribuidas.
Para consideraciones adicionales sobre el uso de transacciones (como el límite de tiempo de ejecución y el límite de tamaño del oplog), consulta también las consideraciones de producción.
Entradas de OpLog
Si una operación de db.collection.findOneAndDelete() borra correctamente un documento, la operación agrega una entrada en el oplog (registro de operaciones). Si la operación falla o no encuentra un documento para borrar, la operación no agrega una entrada en el oplog.
Ejemplos
Borrar un documento
La colección scores contiene documentos similares a los siguientes:
db.scores.insertMany( [ { _id: 6305, name : "A. MacDyver", "assignment" : 5, "points" : 24 }, { _id: 6308, name : "B. Batlock", "assignment" : 3, "points" : 22 }, { _id: 6312, name : "M. Tagnum", "assignment" : 5, "points" : 30 }, { _id: 6319, name : "R. Stiles", "assignment" : 2, "points" : 12 }, { _id: 6322, name : "A. MacDyver", "assignment" : 2, "points" : 14 }, { _id: 6234, name : "R. Stiles", "assignment" : 1, "points" : 10 } ] )
La siguiente operación encuentra el primer documento donde name : M. Tagnum y lo elimina:
db.scores.findOneAndDelete( { "name" : "M. Tagnum" } )
La operación devuelve el documento original que ha sido eliminado:
{ _id: 6312, name: "M. Tagnum", "assignment" : 5, "points" : 30 }
Eliminar un documento usando WriteConcern
La colección scores contiene documentos similares a los siguientes:
db.scores.insertMany( [ { _id: 6305, name : "A. MacDyver", "assignment" : 5, "points" : 24 }, { _id: 6308, name : "B. Batlock", "assignment" : 3, "points" : 22 }, { _id: 6312, name : "M. Tagnum", "assignment" : 5, "points" : 30 }, { _id: 6319, name : "R. Stiles", "assignment" : 2, "points" : 12 }, { _id: 6322, name : "A. MacDyver", "assignment" : 2, "points" : 14 }, { _id: 6234, name : "R. Stiles", "assignment" : 1, "points" : 10 } ] )
La siguiente operación usa un documento de nivel de confirmación de escritura (write concern) dentro del método db.collection.findOneAndDelete() con opciones:
w:1a las solicitudes de reconocimiento de que la operación de escritura se ha propagado al mongod autónomo o al primario en un set de réplicas.j:truepara indicar el número de instancias de MongoDB especificado enw:1que tengan el borrar guardado en el diario en disco.wtimeout : 1000para especificar un límite de tiempo, en milisegundos, para la escritura.wtimeoutsolo se aplica para valoreswmayores que 1.
db.scores.findOneAndDelete( { name: "A. MacDyver" }, { writeConcern: { w : 1, j : true, wtimeout : 1000 } } )
La operación devuelve el siguiente documento:
{ _id: 6305, name: 'A. MacDyver', assignment: 5, points: 24 }
El documento se elimina con las opciones de writeConcern especificadas.
Ordenar y borrar un documento
La colección scores contiene documentos similares a los siguientes:
db.scores.insertMany( [ { _id: 6305, name : "A. MacDyver", "assignment" : 5, "points" : 24 }, { _id: 6308, name : "B. Batlock", "assignment" : 3, "points" : 22 }, { _id: 6312, name : "M. Tagnum", "assignment" : 5, "points" : 30 }, { _id: 6319, name : "R. Stiles", "assignment" : 2, "points" : 12 }, { _id: 6322, name : "A. MacDyver", "assignment" : 2, "points" : 14 }, { _id: 6234, name : "R. Stiles", "assignment" : 1, "points" : 10 } ] )
La siguiente operación primero encuentra todos los documentos donde name : "A. MacDyver". Luego ordena por points de forma ascendente antes de borrar el documento con el valor de puntos más bajo:
db.scores.findOneAndDelete( { "name" : "A. MacDyver" }, { sort : { "points" : 1 } } )
La operación devuelve el documento original que ha sido eliminado:
{ _id: 6322, name: "A. MacDyver", "assignment" : 2, "points" : 14 }
Proyectar el documento eliminado
La siguiente operación utiliza proyección para devolver únicamente los campos _id y assignment en el documento entregado:
db.scores.findOneAndDelete( { "name" : "A. MacDyver" }, { sort : { "points" : 1 }, projection: { "assignment" : 1 } } )
La operación devuelve el documento original con los campos assignment _id y:
{ _id: 6322, "assignment" : 2 }
Actualizar el documento con un límite de tiempo
La siguiente operación establece un límite de tiempo de 5 ms para completar el borrado:
try { db.scores.findOneAndDelete( { "name" : "A. MacDyver" }, { sort : { "points" : 1 }, maxTimeMS : 5 } ) } catch(e){ print(e) }
Si la operación excede el límite de tiempo, devuelve:
MongoServerError: operation exceeded time limit: { "ok": 0, "code" : 50, "codeName" : "MaxTimeMSExpired" }
Nota
Este mensaje de error ha sido acortado para mayor brevedad.
Especificar la intercalación
La intercalación permite a los usuarios especificar reglas propias del lenguaje para la comparación de strings, como reglas para el uso de mayúsculas y minúsculas y marcas de acento.
Una colección myColl tiene los siguientes documentos:
db.myColl.insertMany( [ { _id: 1, category: "café", status: "A" }, { _id: 2, category: "cafe", status: "a" }, { _id: 3, category: "cafE", status: "a" } ] )
La siguiente operación incluye la opción de intercalación:
db.myColl.findOneAndDelete( { category: "cafe", status: "a" }, { collation: { locale: "fr", strength: 1 } } );
La operación devuelve el siguiente documento:
{ "_id" : 1, "category" : "café", "status" : "A" }