sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB - Odstranit dokument

V MongoDB můžete odstranit dokumenty jedním ze tří způsobů.

MongoDB poskytuje tři způsoby odstraňování dokumentů:

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

db.collection.deleteOne() Metoda

db.collection.deleteOne() odstraní pouze jeden dokument, i když kritériím odpovídá více než jeden dokument.

Zde je příklad db.collection.deleteOne() způsob odstranění jednoho dokumentu.

Nejprve spusťte dotaz, který vrátí více výsledků:

db.artists.find( { jméno umělce:{ $in:[ "The Kooks", "Gang of Four", "Bastille" ] } } )

Výsledky:

{ "_id" :ObjectId("5781d7f248ef8c6b3ffb014d"), "jméno umělce" :"The Kooks" }{ "_id" :ObjectId("5781d7f248ef8c6b3ffb014e"), "jméno umělce" :"Id_objektu" :"Id_objektu" :("5781d7f248ef8c6b3ffb014f"), "artistname" :"Gang of Four" }

Dobře, takže víme, že existují tři dokumenty, které splňují tato kritéria.

Nyní použijeme přesně stejná kritéria filtrování pro naše db.collection.deleteOne() metoda:

db.artists.deleteOne( { jméno umělce:{ $in:[ "The Kooks", "Gang of Four", "Bastille" ] } } )

Výsledná zpráva:

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

Byl tedy odstraněn pouze jeden dokument, i když tři dokumenty odpovídaly kritériím.

Spusťte find() znovu dotaz, abyste viděli, které dokumenty zbývají:

db.artists.find( { jméno umělce:{ $in:[ "The Kooks", "Gang of Four", "Bastille" ] } } )

Výsledky:

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

Položka db.collection.deleteMany() Metoda

db.collection.deleteMany() metoda odstraní všechny dokumenty, které odpovídají kritériím.

Spusťte tedy db.collection.deleteMany() metoda s přesně stejnými kritérii jako v našem předchozím příkladu. Pamatujte, zbývají dva záznamy. Podívejme se, zda db.collection.deleteMany() smaže oba:

db.artists.deleteMany( { jméno umělce:{ $in:[ "The Kooks", "Gang of Four", "Bastille" ] } } )

Výsledná zpráva:

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

Takže zbývající dva záznamy byly smazány.

Příkaz db.collection.remove() Metoda

db.collection.remove() metoda odstraní jeden dokument nebo všechny dokumenty, které odpovídají zadaným kritériím.

Zde odstraníme všechny dokumenty, kde je jméno interpreta „AC/DC“.

db.artists.remove( { jméno umělce:"AC/DC" } )

Výsledky:

WriteResult({ "nRemoved" :1 })

V tomto případě je zde pouze jeden AC/DC :)

justOne Možnost

Můžete použít justOne parametr k omezení operace odstranění pouze na jeden dokument (stejně jako použití db.collection.deleteOne() ).

Zde je příklad.

Nejprve spusťte dotaz, který vrátí více dokumentů:

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

Výsledky:

{ "_id" :2, "name" :"Ian Paice", "nástroj" :"bicí", "born" :1948 }{ "_id" :3, "name" :"Roger Glover", " instrument" :"Basa", "born" :1945 }{ "_id" :5, "name" :"Don Airey", "instrument" :"Klávesnice", "born" :1948 }

Nyní smažeme jeden z těchto záznamů pomocí justOne volba. Opět použijeme přesně stejná kritéria filtrování:

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

Výsledná zpráva:

WriteResult({ "nRemoved" :1 })

Nyní spustíme stejný dotaz, abychom zjistili, které dokumenty zbývají:

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

Výsledky:

{ "_id" :3, "name" :"Roger Glover", "nástroj" :"Bas", "born" :1945 }{ "_id" :5, "name" :"Don Airey", " nástroj" :"Klávesy", "nar" :1948 }

Smazat všechny dokumenty ve sbírce

Všechny dokumenty v kolekci můžete jednoduše odstranit vynecháním jakýchkoli kritérií filtrování.

Smažeme všechny dokumenty v umělci kolekce:

db.artists.remove( {} )

Výsledná zpráva:

WriteResult({ "nRemoved" :8 })

Pokud se zobrazí Chyba:odstranění vyžaduje dotaz chyba, zkontrolujte, zda jste nezapomněli zahrnout složené závorky. Stále je musíte zahrnout.


  1. Existuje způsob, jak zabránit MongoDB v přidávání množného čísla k názvům kolekcí?

  2. Jak sloučit pole pole v dokumentu v agregaci Mongo

  3. Jak používat mangoose findOne

  4. Proč Laravel Redis::scan('*') vrací očekávaný klíč, ale Redis::keys('*') ne?