Definición
db.collection.deleteOne()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:Elimina un único documento de una colección.
Devuelve: Un documento que contiene: Un valor booleano
acknowledgedcomotruesi la operación se ejecutó con escribirfalsepreocupación o si escribir preocupación estaba deshabilitadadeletedCountque contiene la cantidad de documentos eliminados
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.
Sintaxis
El método deleteOne() tiene la siguiente forma:
db.collection.deleteOne( <filter>, { writeConcern: <document>, collation: <document>, hint: <document|string>, maxTimeMS: <int>, let: <document> } )
El método deleteOne() toma los siguientes parámetros:
Parameter | Tipo | Descripción | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
Documento | Especifica los criterios de eliminación utilizando un predicado de query. Especifique un documento vacío | |||||||||||
Documento | Opcional. Un documento que expresa el nivel de confirmación de escritura. Omite el uso del nivel de confirmación de escritura por defecto. 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. | |||||||||||
Documento | 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: Al especificar la intercalación, el campo Si no se especifica la intercalación, pero la colección tiene una intercalación por defecto (ver 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. | |||||||||||
Documento | Opcional. Un documento o string que especifica el índice que se utilizará para respaldar el predicado de query. La opción puede tomar un documento de especificación de índice o la string de nombre de índice. Si especifica un índice que no existe, la operación genera un error. Para ver un ejemplo, ve Especificar | |||||||||||
entero | Opcional. Especifica el límite de tiempo en milisegundos para que la operación de borrar se ejecute antes de que se agote el tiempo de espera. | |||||||||||
Documento | Opcional. Especifica un documento que contiene una lista de variables. Esto le permite mejorar la legibilidad de los comandos al separar las variables del texto de la query. La sintaxis del documento es: La variable se establece en el valor devuelto por la expresión y no puede modificarse posteriormente. Para acceder al valor de una variable en el comando, se debe usar el prefijo de doble signo de dólar ( Para usar una variable para los resultados del filtro, debes acceder a la variable dentro del operador Para un ejemplo completo usando |
Comportamiento
Orden de eliminación
db.collection.deleteOne() borra el primer documento que coincida con el filtro. Utiliza un campo que forme parte de un índice único como _id para eliminaciones precisas.
Colecciones fragmentadas
Para usar db.collection.deleteOne() en una colección fragmentada:
Si solo apunta a un fragmento, puedes usar una clave de fragmentación parcial en la especificación del query.
No es necesario que proporcione la clave de partición ni el campo
_iden la especificación de query, porquedeleteOne()utiliza inherentemente un límite de 1.
Transacciones
db.collection.deleteOne() 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.deleteOne() 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 único documento
La colección orders tiene documentos con la siguiente estructura:
db.orders.insertOne( { _id: ObjectId("563237a41a4d68582c2509da"), stock: "Brent Crude Futures", qty: 250, type: "buy-limit", limit: 48.90, creationts: ISODate("2015-11-01T12:30:15Z"), expiryts: ISODate("2015-11-01T12:35:15Z"), client: "Crude Traders Inc." } )
La siguiente operación borra el pedido con _id:
ObjectId("563237a41a4d68582c2509da") :
try { db.orders.deleteOne( { _id: ObjectId("563237a41a4d68582c2509da") } ); } catch (e) { print(e); }
La operación arroja:
{ acknowledged: true, deletedCount: 1 }
La siguiente operación borra el primer documento con expiryts mayor que ISODate("2015-11-01T12:40:15Z")
try { db.orders.deleteOne( { expiryts: { $lt: ISODate("2015-11-01T12:40:15Z") } } ); } catch (e) { print(e); }
La operación arroja:
{ acknowledged: true, deletedCount: 1 }
deleteOne() con un tiempo de espera y variables del query
La siguiente operación borra el documento que coincide con el tipo buy-limit, limit es menor que la variable priceThreshold, y establece un límite de tiempo de 3 segundos:
try { db.orders.deleteOne( { type: "buy-limit" }, { $expr: { $eq: ["$limit", "$$priceThreshold"] } }, { let: { priceThreshold: 49.00 }, maxTimeMS: 3000 } ); } catch (e) { print(e); }
La operación arroja:
{ acknowledged: true, deletedCount: 1 }
deleteOne() con nivel de confirmación de escritura (write concern)
Dado un set de réplicas de tres nodos, la siguiente operación especifica un w de majority, wtimeout de 100:
try { db.orders.deleteOne( { _id: ObjectId("563237a41a4d68582c2509da") }, { w: "majority", wtimeout: 100 } ); } catch (e) { print (e); }
Si el reconocimiento tarda más que el límite de wtimeout, se obtiene la siguiente excepción:
WriteConcernError({ code: 64, errmsg: "waiting for replication timed out", errInfo: { wtimeout: true, writeConcern: { w: "majority", wtimeout: 100, provenance: "getLastErrorDefaults" } } })
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 restaurants tiene los siguientes documentos:
db.restaurants.insertMany( [ { _id: 1, category: "café", status: "Open" }, { _id: 2, category: "cafe", status: "open" }, { _id: 3, category: "cafE", status: "open" } ] )
La siguiente operación incluye la opción de intercalación:
db.restaurants.deleteOne( { category: "cafe", status: "Open" }, { collation: { locale: "fr", strength: 1 } } )
El filtro de borrado especifica una intercalación con strength: 1, lo que significa que la intercalación ignora las diferencias entre mayúsculas y variantes de letras. Como resultado, aunque no exista un documento que coincida exactamente con las variantes de mayúsculas y minúsculas especificadas en el filtro, la operación aún encuentra y borra un documento.
Especifique hint para las operaciones de borrado
En mongosh, crea una colección de students con los siguientes documentos:
db.members.insertMany( [ { _id: 1, student: "Richard", grade: "F", points: 0 }, { _id: 2, student: "Jane", grade: "A", points: 60 }, { _id: 3, student: "Adam", grade: "F", points: 0 }, { _id: 4, student: "Ronan", grade: "D", points: 20 }, { _id: 5, student: "Noah", grade: "F", points: 0 }, { _id: 6, student: "Henry", grade: "A", points: 86 } ] )
Cree el siguiente índice en la colección:
db.members.createIndex( { grade: 1 } )
La siguiente operación de eliminación indica explícitamente que se debe usar el índice { grade: 1 }:
db.members.deleteOne( { points: { $lte: 20 }, grade: "F" }, { hint: { grade: 1 } } )
Nota
Si especifica un índice que no existe, la operación genera un error.
El comando para borrar devuelve lo siguiente:
{ acknowledged: true, deletedCount: 1 }
Para ver los índices utilizados, puede usar el pipeline $indexStats:
db.members.aggregate( [ { $indexStats: { } }, { $sort: { name: 1 } } ] )
El campo accesses.ops en el resultado $indexStats indica la cantidad de operaciones que usaron el índice.
Tip
Para borrar varios documentos, consulte
db.collection.deleteMany()