MongoDB con controladores
Esta página documenta una 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 solo documento según los criterios
filterysorty 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. Los mismos Están disponiblesselectores
find()de consultas como en el método.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> } Consulte Eliminar un documento usando WriteConcern para ver 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
Es posible que a los documentos de una colección fragmentada les falten los campos de clave de fragmento. Para identificar un documento que no tenga la clave de fragmento, puede usar la null coincidencia de igualdad. Junto con otra condición de filtro (como en el _id campo). 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
Eliminar 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 utiliza un documento de preocupación de escritura dentro del db.collection.findOneAndDelete() método con opciones:
w:1para solicitar el reconocimiento de que la operación de escritura se ha propagado al mongod independiente o al principal en un conjunto de réplicas.j:truepara indicar la cantidad de instancias de MongoDB especificadas enw:1para que la eliminación se escriba en el diario del 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 writeConcern especificadas.
Ordenar y eliminar 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 busca primero todos los documentos con name : "A. MacDyver". Luego, ordena por points en orden ascendente antes de eliminar el documento con el valor 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 solo los campos _id y assignment en el documento devuelto:
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 5ms para completar la eliminación:
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 se ha 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" }