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 protected]"
  }
]

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

Tippfehler Johnson
quelle
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.

Nic Cottrell
quelle
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.

Tippfehler Johnson
quelle
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.

Dmitri
quelle
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")
        ]
     }
}) 
mjwrazor
quelle
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.

Anentropisch
quelle
4

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

db.foo.remove({**_id**: new ObjectId("4f872685a64eed5a980ca536")})
Karoy
quelle
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")

SA Khan
quelle
2

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

Weitere Informationen finden Sie hier unter #remove

Yuval Meshorer
quelle
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.

Asad S.
quelle
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.

Dung
quelle