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.