Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

borrar (comando de base de datos)

delete

La El comando delete remueve documentos de una colección. Un solo comando delete puede contener varias especificaciones de eliminación. Los métodos de eliminación proporcionados por los controladores de MongoDB utilizan este comando internamente.

Modificado en la versión 5.0.

Tip

En mongosh, este comando también se puede ejecutar a través del deleteOne()deleteMany() findOneAndDelete() Métodos auxiliares, y.

Los métodos asistente son convenientes para usuarios de mongosh, pero es posible que no proporcionen el mismo nivel de información que los comandos de base de datos. En los casos en que no se necesite la conveniencia o se requieran campos de retorno adicionales, utiliza el comando de base de datos.

Devuelve:Un documento que contiene el estado de la operación. Consulta Salida para obtener más detalles.

Este comando 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 comando tiene la siguiente sintaxis:

db.runCommand(
{
delete: <collection>,
deletes: [
{
q : <query>,
limit : <integer>,
collation: <document>,
hint: <document|string>
},
...
],
comment: <any>,
let: <document>, // Added in MongoDB 5.0
ordered: <boolean>,
writeConcern: { <write concern> },
maxTimeMS: <integer>
}
)

El comando toma los siguientes campos:

Campo
Tipo
Descripción

string

El nombre de la colección objetivo.

arreglo

Una matriz de una o más declaraciones de eliminación para ejecutar en la colección nombrada.

comment

any

Opcional. Un comentario proporcionado por el usuario para adjuntar a este comando. Una vez configurado, este comentario aparece junto a los registros de este comando en las siguientes ubicaciones:

Un comentario puede ser de cualquier tipo BSON válido (string, objeto, arreglo, etc.).

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, vea Uso de variables en let.

Nuevo en la versión 5.0.

booleano

opcional. Si true, entonces cuando una instrucción de eliminación falle, regresa sin ejecutar las instrucciones de eliminación restantes. Si false, entonces, cuando una instrucción de eliminación falle, continúa con las instrucciones restantes de eliminación, si las hay. Por defecto, es true.

Documento

Opcional. Un documento que expresa el nivel de confirmación de escritura del comando delete. Se puede omitir usar el 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.

maxTimeMS

non-negative integer

Opcional.

Especifica un límite de tiempo en milisegundos. Si no especifica un valor para maxTimeMS, las operaciones no agotarán el tiempo de espera. Un valor de 0 especifica explícitamente el comportamiento por defecto sin límites.

MongoDB finaliza las operaciones que exceden su límite de tiempo asignado utilizando el mismo mecanismo que db.killOp(). MongoDB solo termina una operación en uno de sus puntos de interrupción designados.

Cada elemento del arreglo deletes contiene los siguientes campos:

Campo
Tipo
Descripción

Documento

La query que coincide con los documentos que se deben borrar.

entero

El número de documentos coincidentes para borrar. Especifica un 0 para borrar todos los documentos coincidentes o 1 para borrar un único documento.

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 o string

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.

Para utilizar las operaciones delete en una colección fragmentada que especifique la opción limit: 1:

  • Si solo apunta a un fragmento, puede usar una clave de fragmentación parcial en la especificación de query o,

  • Puede proporcionar la clave de fragmentación o el campo _id en la especificación de la query.

El tamaño total de todas las queries (es decir, los valores de campo q) en el arreglo deletes debe ser menor o igual que el tamaño máximo de documento BSON.

La cantidad total de documentos eliminados en la deletes matriz debe ser menor o igual al tamaño masivo máximo.

borrar se puede usar 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.

El siguiente ejemplo elimina de la colección orders un documento que tiene status igual a D especificando el limit de 1:

db.runCommand(
{
delete: "orders",
deletes: [ { q: { status: "D" }, limit: 1 } ]
}
)

El documento devuelto muestra que el comando borró 1 documento. Consulta Resultado para más detalles.

{ "ok" : 1, "n" : 1 }

Nota

Para utilizar las operaciones delete en una colección fragmentada que especifique la opción limit: 1:

  • Si solo apunta a un fragmento, puede usar una clave de fragmentación parcial en la especificación de query o,

  • Puede proporcionar la clave de fragmentación o el campo _id en la especificación de la query.

El siguiente ejemplo elimina de la colección orders todos los documentos que tienen status igual a D especificando el limit de 0:

db.runCommand(
{
delete: "orders",
deletes: [ { q: { status: "D" }, limit: 0 } ],
writeConcern: { w: "majority", wtimeout: 5000 }
}
)

El documento devuelto muestra que el comando encontró y eliminó 13 documentos. Consulte la salida para obtener más información.

{ "ok" : 1, "n" : 13 }

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

Borrar todos los documentos en la colección orders especificando una condición de query vacía y un limit de 0:

db.runCommand(
{
delete: "orders",
deletes: [ { q: { }, limit: 0 } ],
writeConcern: { w: "majority", wtimeout: 5000 }
}
)

El documento devuelto muestra que el comando encontró y eliminó 35 documentos en total. Consulte la salida para obtener más información.

{ "ok" : 1, "n" : 35 }

El siguiente ejemplo realiza múltiples operaciones de eliminación en la colección orders:

db.runCommand(
{
delete: "orders",
deletes: [
{ q: { status: "D" }, limit: 0 },
{ q: { cust_num: 99999, item: "abc123", status: "A" }, limit: 1 }
],
ordered: false,
writeConcern: { w: 1, j: true }
}
)

El documento devuelto muestra que el comando encontró y eliminó 21 documentos en total para las dos instrucciones de borrado. Consulta Salida para más detalles.

{ "ok" : 1, "n" : 21 }

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:

{ _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.runCommand({
delete: "myColl",
deletes: [
{ q: { category: "cafe", status: "a" }, limit: 0, 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.runCommand({
delete: "members",
deletes: [
{ q: { "points": { $lte: 20 }, "status": "P" }, limit: 0, hint: { status: 1 } }
]
})

Nota

Si especifica un índice que no existe, la operación genera un error.

Para ver el índice utilizado, ejecuta explain en la operación:

db.runCommand(
{
explain: {
delete: "members",
deletes: [
{ q: { "points": { $lte: 20 }, "status": "P" }, limit: 0, hint: { status: 1 } }
]
},
verbosity: "queryPlanner"
}
)

Nuevo en la versión 5.0.

Para definir variables a las que puedes acceder en otros lugares del comando, utiliza la opción let.

Nota

Para filtrar los resultados usando una variable, debes acceder a la variable dentro del operador $expr.

Cree una colección cakeFlavors:

db.cakeFlavors.insertMany( [
{ _id: 1, flavor: "chocolate" },
{ _id: 2, flavor: "strawberry" },
{ _id: 3, flavor: "cherry" }
] )

El siguiente ejemplo define una variable targetFlavor en let y la utiliza para borrar el sabor de pastel de fresa:

db.runCommand( {
delete: db.cakeFlavors.getName(),
deletes: [ {
q: { $expr: { $eq: [ "$flavor", "$$targetFlavor" ] } },
limit: 1
} ],
let : { targetFlavor: "strawberry" }
} )

El documento devuelto contiene un subconjunto de los siguientes campos:

delete.ok

El estado del comando.

delete.n

El número de documentos borrados.

delete.writeErrors

Un arreglo de documentos que contiene información sobre cualquier error encontrado durante la operación de eliminación. El arreglo writeErrors contiene un documento de error para cada instrucción de eliminación que cause errores.

Cada documento de error contiene la siguiente información:

delete.writeErrors.index

Un número entero que identifica la instrucción de borrar en el arreglo deletes, que utiliza un índice basado en cero.

delete.writeErrors.code

Valor entero que identifica el error.

delete.writeErrors.errmsg

Una descripción del error.

delete.writeConcernError

Documento que describe los errores relacionados con el nivel de confirmación de escritura (write concern).

Cambiado en la versión 7.0.6: (también disponible en 6.0.14 y 5.0.30): Cuando delete se ejecuta en mongos, siempre se informa de los errores de nivel de confirmación de escritura (write concern), incluso cuando se produce uno o más errores de escritura. En versiones anteriores, la aparición de errores de guardado podía hacer que delete no informara de los errores del nivel de confirmación de escritura (write concern).

Los documentos writeConcernError contienen los siguientes campos:

delete.writeConcernError.code

Valor entero que identifica la causa del error del nivel de confirmación de escritura (write concern).

delete.writeConcernError.errmsg

Una descripción de la causa del error de nivel de confirmación de escritura (write concern).

delete.writeConcernError.errInfo.writeConcern

El objeto del nivel de confirmación de escritura (write concern) usado para la operación correspondiente. Para obtener información sobre los campos del objeto de nivel de confirmación de escritura (write concern), se puede consultar Especificación de nivel de confirmación de escritura (write concern).

El objeto del nivel de confirmación de escritura (write concern) también puede contener el siguiente campo, que indica el origen del nivel de confirmación de escritura (write concern):

delete.writeConcernError.errInfo.writeConcern.provenance

Un valor de string que indica dónde se originó el nivel de confirmación de escritura (write concern) (conocido como nivel de confirmación de escritura (write concern) provenance). La siguiente tabla muestra los valores posibles para este campo y su significado:

Origen
Descripción

clientSupplied

El nivel de confirmación de escritura se especificó en la aplicación.

customDefault

El nivel de confirmación de escritura se originó a partir de un valor por defecto personalizado. Vea setDefaultRWConcern.

getLastErrorDefaults

El nivel de confirmación de escritura se originó en el campo settings.getLastErrorDefaults del set de réplicas.

implicitDefault

El nivel de confirmación de escritura (write concern) se originó en el servidor en ausencia de todas las demás especificaciones de nivel de confirmación de escritura (write concern).

El siguiente es un documento de ejemplo devuelto para un comando exitoso delete:

{ ok: 1, n: 1 }

El siguiente es un ejemplo de documento devuelto para un comando delete que encontró un error porque especificó un índice inexistente en el campo hint:

{
n: 0,
writeErrors: [
{
index: 0,
code: 2,
errmsg: 'error processing query: ns=test.products: hat $eq "bowler"\n' +
'Sort: {}\n' +
'Proj: {}\n' +
' planner returned error :: caused by :: hint provided does not correspond to an existing index'
}
],
ok: 1
}

Volver

count

En esta página