Intenté hacer algo similar a esto, pero eliminé la columna de un documento incrustado. Me tomó un tiempo encontrar una solución y esta fue la primera publicación que encontré, así que pensé en publicar esto aquí para cualquier otra persona que intente hacer lo mismo.
Entonces, digamos que sus datos se ven así:
{
name: 'book',
tags: [
{
words: ['abc','123'],
lat: 33,
long: 22
}, {
words: ['def','456'],
lat: 44,
long: 33
}
]
}
Para eliminar la columna words
del documento incrustado, haga esto:
db.example.update(
{'tags': {'$exists': true}},
{ $unset: {'tags.$[].words': 1}},
{multi: true}
)
o usando el updateMany
db.example.updateMany(
{'tags': {'$exists': true}},
{ $unset: {'tags.$[].words': 1}}
)
El $unset
sólo se editarla si existe el valor pero no va a hacer una navegación segura (no lo puedo comprobar si tags
existe primero) por lo que el que existe es necesaria en el documento incrustado.
Esto utiliza el operador posicional completo ( $[]
) que se introdujo en la versión 3.6
tags.words
debería estarlo$unset
, nowords
? Ver también la respuesta de Salvador Dalí.updateMany
lugar de{multi:true}
, es decirdb.example.updateMany({},{"$unset":{words:""}})