Eliminar por _id en la consola MongoDB


137

En la consola MongoDB, ¿cómo puedo eliminar un registro por id? Aquí está mi colección:

[ 
  {
     "_id" : { "$oid" : "4d512b45cc9374271b02ec4f" },
     "name" : "Gazza"
  },
  {
     "_id" : { "$oid" : "4d513345cc9374271b02ec6c" },
     "name" : "Dave",
     "adminOf" : { },
     "email" : "email@email.com"
  }
]

Y aquí están los comandos que he probado que no funcionan:

db.test_users.remove( {"_id":{"$oid":new ObjectId("4d512b45cc9374271b02ec4f")}});
db.test_users.remove( {"_id":{"$oid":"4d513345cc9374271b02ec6c"}});
db.test_users.remove( {"_id":"4d512b45cc9374271b02ec4f"});
db.test_users.remove( {"_id":new ObjectId("4d512b45cc9374271b02ec4f")});

Eliminar por nombre funciona:

db.test_users.remove( {"name":"Gazza"});

Esto está en el shell del navegador en mongodb.org si eso hace alguna diferencia

Gracias


Ninguna de las soluciones funcionó para mí hasta que agregué una devolución de llamada: db.test_users.remove ({"_id": '4d512b45cc9374271b02ec4f'}, function (err, data) {});
— rttmax

Respuestas:


272

Muy cerca. Esto funcionará:

db.test_users.deleteOne( {"_id": ObjectId("4d512b45cc9374271b02ec4f")});

es decir, no necesita una nueva para ObjectId.

Asimismo, cabe destacar que en algunos conductores / herramientas, remove()se ha desaprobado y se deleteOneo deleteManyse debe utilizar en su lugar.


44
funcionará también sin comillas alrededor de _id db.test_users.remove ({_id: ObjectId ("4d512b45cc9374271b02ec4f")});
— alfonsodev

Intenté esto: TimeAndSpace.remove ({"_id": ObjectId ("8Bd2dZ778LXejYNrL")}); ... y obtuve, "Error de referencia no capturado: ObjectId no está definido en <anónimo>: 2: 13"
— B. Clay Shannon

@BClay El ID del objeto espera una entrada hexadecimal (tal vez también en minúsculas), por lo que falla en los caracteres X, Z, entre otros.
— Nic Cottrell

2
Esto es ridículo.
— Guy

Si el _idcampo no se genera de forma automática (es decir, no es un OBJECTID, pero una cadena), sólo puede escribir el valor de la _idvirtud de las comillas: db.your.database.remove({"_id": "your value"}).
— Aleksandar

16

La respuesta es que la consola web / shell en mongodb.org se comporta de manera diferente y no como yo esperaba. Una versión instalada en casa funcionó perfectamente sin problemas, es decir; el _id generado automáticamente en el shell web se guardó así:

"_id" : { "$oid" : "4d512b45cc9374271b02ec4f" },

La misma configuración de documentos en casa y el _id generado automáticamente se guardó así:

"_id" : ObjectId("4d5192665777000000005490")

Las consultas trabajaron contra este último sin problema.


1
¿Estás seguro de que se guardan de manera diferente en el documento BSON? Esas diferencias parecen ser que el cliente simplemente formatea la salida de manera diferente.
— Nic Cottrell

13

Bueno, el _id es un objeto en su ejemplo, por lo que solo necesita pasar un objeto

'db.test_users.remove({"_id": { "$oid" : "4d513345cc9374271b02ec6c" }})'

Esto debería funcionar

Editar: se agregó el par final para asegurarse de que se compila.


Intenté eso también, no eliminó el registro: db.test_users.remove ({"_id": {"$ oid": "4d513345cc9374271b02ec6c"}}); PS: actualizada la pregunta para mostrar este
— Typos Johnson

En su pregunta, dijo que intentó esto: db.test_users.remove ({"_id": {"$ oid": new ObjectId ("4d512b45cc9374271b02ec4f")}});
— Dmitri

Sí, actualicé la pregunta hace un momento, gracias, he intentado ambas y ninguna funciona. ¿Quizás esto se deba a que no puede eliminar en una propiedad secundaria?
— Typo Johnson

usar esa forma devuelve "operador desconocido: $ oid"
— Arman Ortega

13

Si desea eliminar por una lista de ID, esto funciona muy bien.

db.CollectionName.remove({
    "_id": {
        $in: [
            ObjectId("0930292929292929292929"),
            ObjectId("0920292929292929292929")
        ]
     }
}) 

6

¿Tiene múltiples nodos mongodb en un conjunto de réplicas?

Encontré (estoy usando a través de Robomongo gui mongo shell, supongo que lo mismo se aplica en otros casos) que la sintaxis de eliminación correcta, es decir

db.test_users.remove({"_id": ObjectId("4d512b45cc9374271b02ec4f")})

... no funciona a menos que esté conectado al nodo primario del conjunto de réplicas.


4

Acabo de encontrarme con esto y esta variación funcionó para mí:

db.foo.remove({**_id**: new ObjectId("4f872685a64eed5a980ca536")})

4

primero obtenga la función ObjectID del mongodb ObjectId = require (mongodb) .ObjectID;

entonces puedes llamar al _id con la función de borrar

"_id": ObjectId ("4d5192665777000000005490")


2

Aunque esta publicación no está actualizada, collection.remove está en desuso. collection.delete_onedebe usarse en su lugar!

Puede encontrar más información aquí en #remove


1

Supongamos que tenemos esta colección ficticia:

{ "_id" : ObjectId("5ea53fedaa79db20d4e14284"), "item" : "planner", "qty" : 75 }

simplemente use:

db.inventory.deleteOne({ _id: ObjectId("5ea53fedaa79db20d4e14284") })

se eliminará con esto como respuesta:

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

Eso es.


0

Solución y ejemplo:

1- C: \ MongoDB \ Server \ 3.2 \ bin> mongo (no emita el comando todavía porque aún no está conectado a ninguna base de datos, solo está conectado al servidor de base de datos mongodb).

2-

muestre dbs analytics_database 0.000GB local 0.000GB test_database 0.000GB

3-

use test_database cambiado a db test_database

4-

db.Collection.remove ({"_ id": ObjectId ("5694a3590f6d451c1500002e")}, 1); WriteResult ({"nRemoved": 1})

ahora ve que WriteResult ({"nRemoved": 1}) es 1, no 0.

Hecho.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.