sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB:Ta bort ett fält från ALLA underdokument i ett matrisfält

Anledningen till att du får det felet är att du inte har något predikat i filtersatsen. Du kan göra så här:

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

Och du kommer inte att få ett felmeddelande - i själva verket kommer ett av dokumenten att ha id attribut borttaget. Problemet är att positionsoperatorn bara matchar det FÖRSTA elementet i arrayen som matchar ditt predikat, den matchar inte alla element. Det större problemet är att det för närvarande inte är möjligt att uppdatera alla element i en array i MongoDB (https ://jira.mongodb.org/browse/SERVER-1243 ).

Du måste antingen iterera genom varje element i arrayen med den numeriska positionen ("messages.0.id", "messages.1.id", etc.) eller så kan du dra arrayen in i din applikation, gå igenom element och uppdatera dem och spara sedan arrayen igen.

Du kan se på JIRA-biljetten att det här numret har varit öppet ett bra tag men 10gen verkar inte anse det som särskilt hög prioritet.



  1. Hämta det senaste underdokumentet från Array

  2. Skillnad mellan id- och _id-fält i MongoDB

  3. Hur man hanterar bindestreck i GraphQL Schema definitioner

  4. Låser mongodump databasen?