MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MongoDB - Elimina un documento

In MongoDB, puoi eliminare i documenti utilizzando uno dei tre metodi.

MongoDB fornisce tre metodi per eliminare i documenti:

  • db.collection.deleteOne()
  • db.collection.deleteMany()
  • db.collection.remove()

Il db.collection.deleteOne() Metodo

Il db.collection.deleteOne() cancella solo un documento, anche se più di un documento corrisponde ai criteri.

Ecco un esempio di db.collection.deleteOne() metodo per eliminare un singolo documento.

Innanzitutto, eseguiamo una query che restituisce più risultati:

db.artists.find( { artistname: { $in: [ "The Kooks", "Gang of Four", "Bastille" ] } } )

Risultati:

{ "_id" : ObjectId("5781d7f248ef8c6b3ffb014d"), "artistname" : "The Kooks" }
{ "_id" : ObjectId("5781d7f248ef8c6b3ffb014e"), "artistname" : "Bastille" }
{ "_id" : ObjectId("5781d7f248ef8c6b3ffb014f"), "artistname" : "Gang of Four" }

OK, quindi sappiamo che ci sono tre documenti che soddisfano quei criteri.

Ora utilizziamo gli stessi identici criteri di filtro per il nostro db.collection.deleteOne() metodo:

db.artists.deleteOne( { artistname: { $in: [ "The Kooks", "Gang of Four", "Bastille" ] } } )

Messaggio risultante:

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

Quindi è stato eliminato solo un documento, anche se tre documenti corrispondevano ai criteri.

Eseguiamo find() interroga di nuovo per vedere quali documenti rimangono:

db.artists.find( { artistname: { $in: [ "The Kooks", "Gang of Four", "Bastille" ] } } )

Risultati:

{ "_id" : ObjectId("5781d7f248ef8c6b3ffb014e"), "artistname" : "Bastille" }
{ "_id" : ObjectId("5781d7f248ef8c6b3ffb014f"), "artistname" : "Gang of Four" }

Il db.collection.deleteMany() Metodo

Il db.collection.deleteMany() elimina tutti i documenti che soddisfano i criteri.

Quindi eseguiamo il db.collection.deleteMany() metodo con gli stessi criteri del nostro esempio precedente. Ricorda, rimangono due record. Vediamo se db.collection.deleteMany() elimina entrambi:

db.artists.deleteMany( { artistname: { $in: [ "The Kooks", "Gang of Four", "Bastille" ] } } )

Messaggio risultante:

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

Quindi i restanti due record sono stati eliminati.

Il db.collection.remove() Metodo

Il db.collection.remove() elimina un singolo documento o tutti i documenti che soddisfano i criteri specificati.

Qui cancelliamo tutti i documenti in cui il nome dell'artista è "AC/DC".

db.artists.remove( { artistname: "AC/DC" } )

Risultati:

WriteResult({ "nRemoved" : 1 })

In questo caso, c'è solo un AC/DC :)

Il justOne Opzione

Puoi usare justOne parametro per limitare l'operazione di rimozione a un solo documento (proprio come usare db.collection.deleteOne() ).

Ecco un esempio.

Innanzitutto, eseguiamo una query che restituisce più documenti:

db.musicians.find( { born: { $lt: 1950 } } )

Risultati:

{ "_id" : 2, "name" : "Ian Paice", "instrument" : "Drums", "born" : 1948 }
{ "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 }
{ "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 }

Ora elimineremo uno di quei record usando justOne opzione. Anche in questo caso, utilizzeremo gli stessi identici criteri di filtro:

db.musicians.remove( { born: { $lt: 1950 } }, { justOne: 1 } )

Messaggio risultante:

WriteResult({ "nRemoved" : 1 })

Ora eseguiamo la stessa query per vedere quali documenti sono rimasti:

db.musicians.find( { born: { $lt: 1950 } } )

Risultati:

{ "_id" : 3, "name" : "Roger Glover", "instrument" : "Bass", "born" : 1945 }
{ "_id" : 5, "name" : "Don Airey", "instrument" : "Keyboards", "born" : 1948 }

Elimina tutti i documenti in una raccolta

Puoi eliminare tutti i documenti di una raccolta semplicemente omettendo qualsiasi criterio di filtro.

Eliminiamo tutti i documenti negli artisti collezione:

db.artists.remove( {} )

Messaggio risultante:

WriteResult({ "nRemoved" : 8 })

Se ricevi un Errore:la rimozione richiede una query errore, controlla di non aver dimenticato di inserire le parentesi graffe. Devi ancora includerli.