MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie entfernt man in mongoDb ein Array-Element anhand seines Index?

Es gibt keinen direkten Weg zum Ziehen/Entfernen nach Array-Index. Tatsächlich ist dies ein offenes Thema http://jira.mongodb.org/browse/SERVER-1014 , Sie können dafür stimmen.

Die Problemumgehung besteht darin, $unset und dann $pull:

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

Update:Wie in einigen Kommentaren erwähnt, ist dieser Ansatz nicht atomar und kann zu Racebedingungen führen, wenn andere Clients zwischen den beiden Vorgängen lesen und/oder schreiben. Wenn die Operation atomar sein muss, könnten wir:

  • Lesen Sie das Dokument aus der Datenbank
  • Aktualisieren Sie das Dokument und entfernen Sie das Element im Array
  • Ersetzen Sie das Dokument in der Datenbank. Um sicherzustellen, dass sich das Dokument seit dem Lesen nicht geändert hat, können wir das Update verwenden, wenn das aktuelle Muster in den Mongo-Dokumenten beschrieben ist