sql >> Databasteknik >  >> NoSQL >> MongoDB

I mongoDb, hur tar du bort ett array-element genom dess index?

Det finns inget rakt sätt att dra/ta bort med arrayindex. Faktum är att detta är ett öppet problem http://jira.mongodb.org/browse/SERVER-1014 , du kan rösta på det.

Lösningen är att använda $unset och sedan $pull:

db.lists.update({}, {$unset : {"interests.3" : 1 }}) 
db.lists.update({}, {$pull : {"interests" : null}})

Uppdatering:som nämnts i några av kommentarerna är detta tillvägagångssätt inte atomärt och kan orsaka vissa rasförhållanden om andra klienter läser och/eller skriver mellan de två operationerna. Om vi ​​behöver att operationen ska vara atomär kan vi:

  • Läs dokumentet från databasen
  • Uppdatera dokumentet och ta bort objektet i arrayen
  • Ersätt dokumentet i databasen. För att säkerställa att dokumentet inte har ändrats sedan vi läste det, kan vi använda uppdateringen om det aktuella mönstret beskrivs i mongo docs


  1. Stack Overflow, Redis och Cache-ogiltigförklaring

  2. Vill du avbryta en uppgift som redan körs i Python RQ?

  3. MongoDB C# Query Array av objekt som innehåller ett egenskapsvärde

  4. Importera dokument till MongoDB från en mängd JSON-dokument