¿Cómo eliminar un campo por completo de un documento MongoDB?
{
name: 'book',
tags: {
words: ['abc','123'],
lat: 33,
long: 22
}
}
Supongamos que esto es un documento. ¿Cómo elimino " words
" por completo de todos los documentos de esta colección? Quiero que todos los documentos no tengan " words
":
{
name: 'book',
tags: {
lat: 33,
long: 22
}
}
Prueba esto: si tu colección era 'ejemplo'
db.example.update({}, {$unset: {words:1}}, false, true);
Consulte esto:
http://www.mongodb.org/display/DOCS/Updating#Updating-%24unset
ACTUALIZAR :
El enlace anterior ya no cubre "$desarmado". Asegúrese de agregar {multi: true}
si desea eliminar este campo de todos los documentos de la colección; de lo contrario, sólo lo eliminará del primer documento que encuentre que coincida. Consulte esto para obtener documentación actualizada:
https://docs.mongodb.com/manual/reference/operator/update/unset/
Ejemplo:
db.example.update({}, {$unset: {words:1}} , {multi: true});
Al principio, no entendí por qué la pregunta tiene una recompensa (pensé que la pregunta tiene una buena respuesta y no hay nada que agregar), pero luego me di cuenta de que la respuesta que fue aceptada y votada 15 veces en realidad era incorrecta.
Sí, debe usar $unset
el operador , pero este desarmado eliminará la clave de palabras que no existe para un documento de una colección. Básicamente no hará nada.
Por lo tanto, debe decirle a Mongo que busque en las etiquetas del documento y luego en las palabras usando notación de puntos . Entonces la consulta correcta es.
db.example.update(
{},
{ $unset: {'tags.words':1}},
false, true
)
Para completar, me referiré a otra forma de hacerlo , que es mucho peor, pero de esta manera puedes cambiar el campo con cualquier código personalizado (incluso basado en otro campo de este documento).
db.example.updateMany({},{"$unset":{"tags.words":1}})
También podemos usar esto para actualizar múltiples documentos.