Docs Menu
Docs Home
/ /

db.collection.remove() (método mongosh)

Importante

Método obsoleto de mongosh

Este método está obsoleto en mongosh. Para conocer métodos alternativos, consulte Cambios de compatibilidad con Mongo Shell heredado.

db.collection.remove()

Remueve documentos de una colección.

Devuelve:Un objeto WriteResult que contiene el estado de la operación.

El método db.collection.remove() puede tener una de dos sintaxis. El método remove() puede tomar un documento de query y un booleano justOne opcional:

db.collection.remove(
<query>,
<justOne>
)

O bien, el método puede tomar un documento de query y un documento opcional de opciones de remover:

Modificado en la versión 5.0.

db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>,
collation: <document>,
let: <document> // Added in MongoDB 5.0
}
)

El método remove() toma los siguientes parámetros:

Parameter
Tipo
Descripción

query

Documento

Especifica los criterios de eliminación utilizando Operadores de consulta. Para eliminar todos los documentos de una colección, pase un documento vacío{} ().

justOne

booleano

Opcional. Para limitar la eliminación a un solo documento, establece true. Omite usar el valor por defecto de false y borrar todos los documentos que cumplan con los criterios de borrado.

writeConcern

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. Consulta Nivel de confirmación de escritura.

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.

collation

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.

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.

El método remove() utiliza el comando delete, que emplea el nivel de confirmación de escritura por defecto. Para especificar un nivel de confirmación de escritura diferente, incluye el nivel de confirmación de escritura en el parámetro de opciones.

Por defecto, remove() remueve todos los documentos que coinciden con la expresión query. Especifica la opción justOne para limitar la operación a eliminar un solo documento. Para borrar un solo documento ordenado en un orden especificado, utiliza el método findAndModify().

Al remover varios documentos, la operación de remoción puede intercalarse con otras operaciones de lectura y/o guardado en la colección.

No puedes utilizar el método remove() en una colección de series de tiempo.

Para utilizar las operaciones remove() en una colección fragmentada que especifique la opción justOne: true:

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

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

Los siguientes son ejemplos del método remove().

Para remover todos los documentos de una colección, llama al método remove con un documento de query vacío {}. La siguiente operación borra todos los documentos de la colección bios:

db.bios.remove( { } )

Esta operación no es equivalente al método drop().

Para remover todos los documentos de una colección, puede ser más eficiente utilizar el método drop() para descartar toda la colección, incluidos los índices, y luego recrear la colección y reconstruir los índices.

Para remover los documentos que coinciden con un criterio de eliminación, llama al método remove() con el parámetro <query> :

La siguiente operación remueve todos los documentos de la colección products donde qty es mayor que 20:

db.products.remove( { qty: { $gt: 20 } } )

La siguiente operación en un set de réplicas elimina todos los documentos de la colección products donde qty es mayor que 20 y especifica un nivel de confirmación de escritura (write concern) de w: 2 con un wtimeout de 5000 milisegundos. Esta operación vuelve después de que el guardado se propaga tanto al primario como a un secundario, o bien, se agota al cabo de 5 segundos.

db.products.remove(
{ qty: { $gt: 20 } },
{ writeConcern: { w: "majority", wtimeout: 5000 } }
)

Para remover el primer documento que cumpla con un criterio de eliminación, llama al método remove con el criterio query y el parámetro justOne configurado en true o 1.

La siguiente operación elimina el primer documento de la colección products donde qty es mayor que 20:

db.products.remove( { qty: { $gt: 20 } }, true )

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.myColl.remove(
{ category: "cafe", status: "A" },
{ collation: { locale: "fr", strength: 1 } }
)

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.cakeFlavors.remove(
{ $expr: { $eq: [ "$flavor", "$$targetFlavor" ] } },
{ let : { targetFlavor: "strawberry" } }
)

El remove() devuelve un objeto WriteResult() que contiene el estado de la operación. Al tener éxito, el objeto WriteResult() contiene información sobre la cantidad de documentos eliminados:

WriteResult({ "nRemoved" : 4 })

Tip

Si el método remove() encuentra errores de nivel de confirmación de escritura (write concern), los resultados incluyen el campo WriteResult.writeConcernError:

WriteResult({
"nRemoved" : 7,
"writeConcernError" : {
"code" : 64,
"codeName" : "WriteConcernTimeout",
"errmsg" : "waiting for replication timed out",
"errInfo" : {
"wtimeout" : true,
"writeConcern" : {
"w" : "majority",
"wtimeout" : 1,
"provenance" : "getLastErrorDefaults"
}
}
}
})

Si el método remove() encuentra un error que no es de nivel de confirmación de escritura, los resultados incluyen el campo WriteResult.writeError:

WriteResult({
"nRemoved" : 0,
"writeError" : {
"code" : 2,
"errmsg" : "unknown top level operator: $invalidFieldName"
}
})

Volver

db.collection.reIndex

En esta página