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

MongoDB:Entfernen eines Felds aus ALLEN Unterdokumenten in einem Array-Feld

Der Grund, warum Sie diesen Fehler erhalten, ist, dass Sie kein Prädikat in der Filterklausel haben. Sie können dies tun:

mongos> db.test.update({"messages.id": {$exists: true}}, {$unset: {"messages.$.id":true}}, {multi:true})

Und Sie erhalten keinen Fehler – tatsächlich wird eines der Dokumente die id haben Attribut entfernt. Das Problem ist, dass der Positionsoperator nur mit dem ERSTEN Element des Arrays übereinstimmt, das mit Ihrem Prädikat übereinstimmt, nicht mit allen Elementen. Das größere Problem ist, dass es derzeit nicht möglich ist, alle Elemente in einem Array in MongoDB (https ://jira.mongodb.org/browse/SERVER-1243 ).

Sie müssen entweder jedes Element im Array unter Verwendung der numerischen Position ("messages.0.id", "messages.1.id" usw.) durchlaufen, oder Sie können das Array in Ihre Anwendung ziehen und die Elemente und aktualisiere sie und speichere dann das Array wieder ab.

Sie können aus dem JIRA-Ticket ersehen, dass dieses Problem schon seit einiger Zeit offen ist, aber 10gen scheint es nicht als sehr hohe Priorität einzustufen.