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.