Entfernen Sie mit _id in der MongoDB-Konsole


136

Wie kann ich in der MongoDB-Konsole einen Datensatz anhand der ID entfernen? Hier ist meine Sammlung:

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

Und hier sind die Befehle, die ich ausprobiert habe und die nicht funktionieren:

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")});

Das Entfernen nach Namen funktioniert:

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

Dies ist in der Browser-Shell auf mongodb.org, wenn dies einen Unterschied macht

Vielen Dank


Keine der Lösungen funktionierte für mich, bis ich einen Rückruf hinzufügte: db.test_users.remove ({"_id": '4d512b45cc9374271b02ec4f'}, function (err, data) {});
— Rttmax

Antworten:


271

Sehr nah. Das wird funktionieren:

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

dh Sie benötigen keine neue für die ObjectId.

Beachten Sie auch, dass in einigen Treiber / Tools, remove()ist veraltet und wird deleteOneoder deleteManysollte stattdessen verwendet werden.


4
es funktioniert auch ohne Anführungszeichen um _id db.test_users.remove ({_id: ObjectId ("4d512b45cc9374271b02ec4f")});
— Alfonsodev

Ich habe Folgendes versucht: TimeAndSpace.remove ({"_id": ObjectId ("8Bd2dZ778LXejYNrL")}); ... und ich bekam: "Ungefangener Referenzfehler: ObjectId ist nicht definiert bei <anonymous>: 2: 13"
— B. Clay Shannon

@BClay Die Objekt-ID erwartet eine hexadezimale Eingabe (möglicherweise auch in Kleinbuchstaben), sodass sie unter anderem bei den X-, Z-Zeichen fehlschlägt.
— Nic Cottrell

2
Das ist lächerlich.
— Guy

Wenn das _idFeld nicht automatisch generiert wird (dh es ist keine ObjectId, sondern eine Zeichenfolge), können Sie einfach den Wert der _idunter Anführungszeichen stehenden Zeichen schreiben : db.your.database.remove({"_id": "your value"}).
— Aleksandar

16

Die Antwort ist, dass sich die Webkonsole / Shell auf mongodb.org anders verhält und nicht so, wie ich es erwartet hatte. Eine zu Hause installierte Version funktionierte einwandfrei, dh; Die automatisch generierte _id in der Web-Shell wurde wie folgt gespeichert:

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

Das gleiche Dokument-Setup zu Hause und die automatisch generierte _id wurden wie folgt gespeichert:

"_id" : ObjectId("4d5192665777000000005490")

Abfragen funktionierten problemlos gegen Letzteres.


1
Sind Sie sicher, dass sie im Dokument BSON unterschiedlich gespeichert sind? Diese Unterschiede scheinen der Client zu sein, der die Ausgabe nur anders formatiert.
— Nic Cottrell

13

Nun, die _id ist ein Objekt in Ihrem Beispiel, Sie müssen also nur ein Objekt übergeben

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

Das sollte funktionieren

Bearbeiten: Nachfolgendes Paren hinzugefügt, um sicherzustellen, dass es kompiliert wird.


Ich habe auch versucht, den Datensatz nicht zu entfernen: db.test_users.remove ({"_id": {"$ oid": "4d513345cc9374271b02ec6c"}}); ps: hat die Frage aktualisiert, um dies zu zeigen
— Typo Johnson

In Ihrer Frage sagten Sie, Sie hätten Folgendes versucht: db.test_users.remove ({"_id": {"$ oid": new ObjectId ("4d512b45cc9374271b02ec4f")}});
— Dmitri

Ja, ich habe die Frage gerade aktualisiert, danke, ich habe beide ausprobiert und keine funktioniert. Vielleicht liegt das daran, dass Sie eine Untereigenschaft nicht löschen können?
— Tippfehler Johnson

Auf diese Weise wird "unbekannter Operator: $ oid" zurückgegeben
— Arman Ortega

13

Wenn Sie anhand einer Liste von IDs entfernen möchten, funktioniert dies hervorragend.

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

6

Haben Sie mehrere Mongodb-Knoten in einem Replikatsatz?

Ich fand (ich verwende über Robomongo Gui Mongo Shell, ich denke, dasselbe gilt in anderen Fällen), dass die richtige Syntax zum Entfernen, dh

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

... funktioniert nicht, es sei denn , Sie mit dem verbunden sind primäre Knoten der Replikat - Gruppe.


4

Ich bin gerade selbst darauf gestoßen und diese Variante hat bei mir funktioniert:

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

4

Holen Sie sich zuerst die ObjectID-Funktion aus dem Mongodb ObjectId = require (mongodb) .ObjectID;

dann können Sie die _id mit der Löschfunktion aufrufen

"_id": ObjectId ("4d5192665777000000005490")


2

Obwohl dieser Beitrag veraltet ist, ist collection.remove veraltet! collection.delete_onesollte stattdessen verwendet werden!

Weitere Informationen finden Sie hier unter #remove


1

Angenommen, wir haben diese Dummy-Sammlung:

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

Verwenden Sie einfach:

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

es wird mit dieser als Antwort gelöscht:

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

Das ist es.


0

Lösung und Beispiel:

1- C: \ MongoDB \ Server \ 3.2 \ bin> mongo (Befehl noch nicht ausgeben, da Sie noch nicht mit einer Datenbank verbunden sind, sondern nur mit dem Datenbankserver mongodb).

2-

show dbs analysis_database 0,000GB local 0,000GB test_database 0,000GB

3-

Verwenden Sie test_database, umgeschaltet auf db test_database

4-

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

Jetzt sehen Sie, dass WriteResult ({"nRemoved": 1}) 1 nicht 0 ist.

Getan.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.