sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB:eliminar un campo de TODOS los subdocumentos en un campo de matriz

La razón por la que recibe ese error es porque no tiene ningún predicado en la cláusula de filtro. Puedes hacer esto:

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

Y no obtendrá un error; de hecho, uno de los documentos tendrá el id atributo eliminado. El problema es que el operador posicional solo coincide con el PRIMER elemento de la matriz que coincide con su predicado, no coincide con todos los elementos. El mayor problema es que actualmente no es posible actualizar todos los elementos en una matriz en MongoDB (https ://jira.mongodb.org/browse/SERVER-1243 ).

Deberá iterar a través de cada elemento en la matriz usando la posición numérica ("messages.0.id", "messages.1.id", etc.) o puede extraer la matriz en su aplicación, recorrer el elementos y actualícelos, y luego vuelva a guardar la matriz.

Puede ver en el ticket de JIRA que este problema ha estado abierto durante bastante tiempo, pero 10gen no parece considerarlo una prioridad muy alta.