Rimuovi da _id nella console MongoDB


138

Nella console MongoDB come posso rimuovere un record per ID? Ecco la mia collezione:

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

Ed ecco i comandi che ho provato che non funzionano:

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

La rimozione per nome funziona:

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

Questo è nella shell del browser su mongodb.org se questo fa la differenza

Grazie


Nessuna delle soluzioni ha funzionato per me fino a quando non ho aggiunto un callback: db.test_users.remove ({"_id": '4d512b45cc9374271b02ec4f'}, function (err, data) {});
rttmax,

Risposte:


273

Molto vicino. Questo funzionerà:

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

cioè non hai bisogno di un nuovo per l'ObjectId.

Si noti inoltre che in alcuni driver / strumenti, remove()è ora deprecato e deleteOneo deleteManydovrebbe essere usato al posto.


4
funzionerà anche senza virgolette intorno a _id db.test_users.remove ({_id: ObjectId ("4d512b45cc9374271b02ec4f")});
Alfonsodev,

Ho provato questo: TimeAndSpace.remove ({"_id": ObjectId ("8Bd2dZ778LXejYNrL")}); ... e ho ottenuto "Uncaught ReferenceError: ObjectId non è definito in <anonimo>: 2: 13"
B. Clay Shannon,

@BClay L'ID oggetto prevede input esadecimali (forse anche minuscoli), quindi tra i caratteri X, Z non riesce.
Nic Cottrell,

2
Questo è _reidiculous.
Guy,

Se il _idcampo non viene generato automaticamente (vale a dire che non è un ObjectId, ma una stringa), si può semplicemente scrivere il valore del _idsotto virgolette: db.your.database.remove({"_id": "your value"}).
Aleksandar,

16

La risposta è che la console / shell web di mongodb.org si comporta diversamente e non come mi aspettavo. Una versione installata a casa ha funzionato perfettamente senza problemi, ad esempio; il _id generato automaticamente sulla web shell è stato salvato in questo modo:

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

La stessa configurazione del documento a casa e il _id generato automaticamente sono stati salvati in questo modo:

"_id" : ObjectId("4d5192665777000000005490")

Le query hanno funzionato contro quest'ultima senza problemi.


1
Sei sicuro che siano stati salvati diversamente nel documento BSON? Queste differenze sembrano essere il client che sta semplicemente formattando l'output in modo diverso.
Nic Cottrell,

13

Bene, _id è un oggetto nel tuo esempio, quindi devi solo passare un oggetto

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

Questo dovrebbe funzionare

Modifica: aggiunta una parentesi finale per assicurarsi che sia stata compilata.


Ho provato anche quello che non ha rimosso il record: db.test_users.remove ({"_id": {"$ oid": "4d513345cc9374271b02ec6c"}}); ps: aggiornata la domanda per mostrare questo
Typo Johnson

Nella tua domanda hai detto di aver provato questo: db.test_users.remove ({"_id": {"$ oid": new ObjectId ("4d512b45cc9374271b02ec4f")}});
Dmitri,

Sì, ho aggiornato la domanda proprio ora grazie, ho provato entrambi e nessuno dei due ha funzionato. Forse è perché non puoi eliminare una proprietà secondaria?
Typo Johnson,

usare in questo modo restituisce "operatore sconosciuto: $ oid"
Arman Ortega il

13

Se desideri rimuovere un elenco di ID, questo funziona alla grande.

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

6

Hai più nodi mongodb in un set di repliche?

Ho scoperto (sto usando tramite Robomongo gui mongo shell, credo che valga lo stesso in altri casi) che la sintassi di rimozione corretta, cioè

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

... non funziona se non si è connessi al nodo primario del set di repliche.


4

Mi sono appena imbattuto in questo me stesso e questa variazione ha funzionato per me:

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

4

prima ottenere la funzione ObjectID da mongodb ObjectId = require (mongodb) .ObjectID;

quindi puoi chiamare _id con la funzione di eliminazione

"_id": ObjectId ("4d5192665777000000005490")


2

Anche se questo post è obsoleto, collection.remove è obsoleto! collection.delete_onedovrebbe essere usato invece!

Maggiori informazioni sono disponibili qui sotto #remove


1

Supponiamo di avere questa collezione fittizia:

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

usa semplicemente:

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

verrà eliminato con questo come risposta:

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

Questo è tutto.


0

Soluzione ed esempio:

1- C: \ MongoDB \ Server \ 3.2 \ bin> mongo (non emettere ancora il comando perché non si è ancora connessi a nessun database, si è connessi solo al mongodb del server di database).

2-

mostra dbs analytics_database 0.000GB locale 0.000GB test_database 0.000GB

3-

usa test_database passato a db test_database

4-

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

ora vedi WriteResult ({"nRemoved": 1}) è 1 non 0.

Fatto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.