sql >> Database >  >> NoSQL >> MongoDB

MongoDB:een veld verwijderen uit ALLE subdocumenten in een matrixveld

De reden dat u die fout krijgt, is omdat u geen predikaat in de filterclausule hebt. U kunt dit doen:

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

En u krijgt geen foutmelding - in feite heeft een van de documenten de id attribuut verwijderd. Het probleem is dat de positionele operator alleen overeenkomt met het EERSTE element van de array dat overeenkomt met uw predikaat, niet met alle elementen. Het grotere probleem is dat het momenteel niet mogelijk is om alle elementen in een array in MongoDB bij te werken (https ://jira.mongodb.org/browse/SERVER-1243 ).

U moet ofwel elk element in de array doorlopen met behulp van de numerieke positie ("messages.0.id", "messages.1.id", enz.) of u kunt de array in uw toepassing trekken, door de elementen en werk ze bij, en sla de array vervolgens weer op.

Je kunt aan het JIRA-ticket zien dat dit probleem al een tijdje open staat, maar 10gen lijkt het geen hoge prioriteit te geven.



  1. Node.js Redis Connection Pooling

  2. FOUT:onderliggende proces mislukt, afgesloten met foutnummer 48

  3. Mongo db niet gelijk aan query werkt niet

  4. Eenvoudige verbinding met mongodb in de react-app