Docs Menu
Docs Home
/ /

db.colección.deleteMany() (método de mongosh)

db.collection.deleteMany()

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.jsPyMongoCC++GoJava RSKotlin CoroutineKotlin SyncPHPMongoidRustScala

Remueve todos los documentos que coincidan con filter 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

Nota

Si estás borrando todos los documentos de una colección grande, puede ser más rápido descartar la colección y recrearla. Antes de eliminar la colección, anota todos los índices de la colección. Debes recrear cualquier índice que existiera en la colección original. Si la colección original estaba particionada, también debes particionar la colección recreada.

Para obtener más información sobre cómo eliminar una colección, consulte db.collection.drop().

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 deleteMany() tiene la siguiente sintaxis:

db.collection.deleteMany(
<filter>,
{
writeConcern: <document>,
collation: <document>,
hint: <document>|<string>,
maxTimeMS: <int>,
let: <document>
}
)
Parameter
Tipo
Descripción

Documento

Especifica los criterios de borrado mediante operadores del query.

Para borrar todos los documentos de una colección, pase 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:

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 soportar 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.

  • Si deleteMany() se ejecuta fuera de una transacción, las operaciones que apuntan a más de una partición difunden la operación a todas las particiones del clúster.

  • Si deleteMany() se ejecuta dentro de una transacción, las operaciones que apuntan a más de una partición solo afectan a las particiones relevantes.

Advertencia

Debido a las migraciones simultáneas de fragmentos, deleteMany() podría ejecutarse sin borrar todos los documentos que coincidan con el filtro especificado. Para asegurarte de borrar todos los documentos coincidentes, realiza una de las siguientes operaciones:

  • Ejecuta el método deleteMany() de forma iterativa hasta que el query correspondiente con el mismo filtro no devuelva ningún documento.

  • Ejecuta deleteMany() dentro de una transacción.

  • Programa la ventana de balanceo para que las migraciones de fragmentos solo ocurran en momentos específicos, y ejecuta cualquier Operación deleteMany() fuera de la ventana especificada.

En cambio, para borrar un solo documento, use db.collection.deleteOne().

Como alternativa, utilice un campo que sea parte de un índice único como _id.

db.collection.deleteMany() 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.

db.collection.deleteMany() borra documentos uno a la vez. Si el nodo primario falla durante una operación de db.collection.deleteMany(), los documentos que aún no se han borrados de los nodos secundarios no se borrarán de la colección.

Si una operación db.collection.deleteMany() borra correctamente uno o más documentos, la operación agrega una entrada para cada documento borrado en el oplog (registro de operaciones). Si la operación falla o no encuentra ningún documento para borrar, 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 todos los documentos donde client : "Crude Traders Inc.":

try {
db.orders.deleteMany( { "client" : "Crude Traders Inc." } );
} catch (e) {
print (e);
}

La operación arroja:

{ "acknowledged" : true, "deletedCount" : 10 }

La siguiente operación borra todos los documentos donde stock : "Brent Crude Futures" y limit son mayores que 48.88:

try {
db.orders.deleteMany( { "stock" : "Brent Crude Futures", "limit" : { $gt : 48.88 } } );
} catch (e) {
print (e);
}

La operación arroja:

{ "acknowledged" : true, "deletedCount" : 8 }

La siguiente Operación borra todos los documentos donde client es igual a la variable targetClient y establece un límite de tiempo de 3 segundos:

try {
db.orders.deleteMany(
{ $expr: { $eq: ["$client", "$$targetClient"] } },
{
let: { targetClient: "Crude Traders Inc." },
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 y un wtimeout de 100:

try {
db.orders.deleteMany(
{ "client" : "Crude Traders Inc." },
{ writeConcern: { 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: "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.restaurants.deleteMany(
{ category: "cafe", status: "A" },
{ collation: { locale: "fr", strength: 1 } }
)

En mongosh, crea una colección de members con los siguientes documentos:

db.members.insertMany([
{ "_id" : 1, "member" : "abc123", "status" : "P", "points" : 0, "misc1" : null, "misc2" : null },
{ "_id" : 2, "member" : "xyz123", "status" : "A", "points" : 60, "misc1" : "reminder: ping me at 100pts", "misc2" : "Some random comment" },
{ "_id" : 3, "member" : "lmn123", "status" : "P", "points" : 0, "misc1" : null, "misc2" : null },
{ "_id" : 4, "member" : "pqr123", "status" : "D", "points" : 20, "misc1" : "Deactivated", "misc2" : null },
{ "_id" : 5, "member" : "ijk123", "status" : "P", "points" : 0, "misc1" : null, "misc2" : null },
{ "_id" : 6, "member" : "cde123", "status" : "A", "points" : 86, "misc1" : "reminder: ping me at 100pts", "misc2" : "Some random comment" }
])

Cree los siguientes índices en la colección:

db.members.createIndex( { status: 1 } )
db.members.createIndex( { points: 1 } )

La siguiente operación de eliminación indica explícitamente que se debe usar el índice { status: 1 }:

db.members.deleteMany(
{ "points": { $lte: 20 }, "status": "P" },
{ hint: { status: 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" : 3 }

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.

Volver

db.collection.dataSize

En esta página