Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

borrar (comando de base de datos)

delete

Remueve documentos de una colección. Un solo comando puede contener múltiples especificaciones de borrado. Los métodos de borrado del driver de MongoDB utilizan este comando internamente.

Modificado en la 5.0 versiĂłn.:

Tip

En mongosh, este comando también se puede ejecutar a través de los métodos asistentes deleteOne(), deleteMany() y findOneAndDelete().

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

Un arreglo de una o más instrucciones de eliminación que deben ejecutarse en la colección con nombre.

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, ve a Usa Variables en let.

Novedad 5.0 en la versiĂłn.:

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. Especifica el nivel de confirmaciĂłn de escritura (write concern). Omita para utilizar el nivel de confirmaciĂłn de escritura (write concern) 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.

Opcional. Especifica la intercalaciĂłn que se debe 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 cadena que especifica el índice que se utilizará para admitir el predicadode la consulta.

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 un ejemplo, ver 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 todos los documentos de query en el arreglo deletes no debe exceder el tamaño máximo del documento BSON.

El número total de documentos a borrar en el arreglo deletes no debe exceder el tamaño máximo por lote.

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 el status igual a D especificando la 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 el 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 eliminó 13 documentos. Consulte Salida para obtener más detalles.

{ "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 eliminó 35 documentos. Consulte Salida para obtener más detalles.

{ "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 eliminó 21 documentos para las dos instrucciones de eliminación. Consulte Salida para obtener 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"
}
)

Novedad 5.0 en la versiĂłn.:

Para definir variables a las que puedas acceder en otras partes 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 borrado. El arreglo writeErrors contiene un documento de error por cada instrucciĂłn de borrado que da error.

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

Un arreglo de documentos que contiene informaciĂłn sobre cualquier error encontrado durante la operaciĂłn de borrado.

Modificado en la 7.0.6 versiĂłn.:

(Tambiéndisponible 6.0.14 en 5.0.30 y): Cuando delete se ejecuta en, siempre se informan errores de escritura, incluso cuando se produce uno o más mongos delete errores de escritura. En versiones anteriores, la aparición de errores de escritura podía provocar que no informara de errores de escritura.

Cada documento de error contiene 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
}