Docs Menu
Docs Home
/ /

db.collection.deleteOne() (método de mongosh)

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:

C#Java SyncNode.jsPyMongoC++GoJava RSKotlin CoroutineKotlin SyncPHPMongoidRustScala
db.collection.deleteOne()

Elimina un único documento de una colección.

Devuelve:Un documento que contiene:
  • Un valor booleano acknowledged como true si la operación se ejecutó con escribir false preocupación o si escribir preocupación estaba deshabilitada

  • deletedCount que contiene la cantidad de documentos eliminados

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.

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 { } para eliminar el primer documento devuelto en la colección.

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:

collation: {
locale: <string>,
caseLevel: <boolean>,
caseFirst: <string>,
strength: <int>,
numericOrdering: <boolean>,
alternate: <string>,
maxVariable: <string>,
backwards: <boolean>
}

Al especificar la intercalación, el campo locale es 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.

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 hint para las operaciones de borrado.

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:

{
<variable_name_1>: <expression_1>,
...,
<variable_name_n>: <expression_n>
}

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 ($$) junto con el nombre de la variable en la forma $$<variable_name>. Por ejemplo: $$targetTotal.

Para usar una variable para los resultados del filtro, debes acceder a la variable dentro del operador $expr.

Para un ejemplo completo usando let y variables, ve Actualizar con variables let.

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.

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 _id en la especificación de query, porque deleteOne() utiliza inherentemente un límite de 1.

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.

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.

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 }

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 }

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"
}
}
})

Tip

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.

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()

Volver

db.collection.deleteMany

En esta página