¿Cómo eliminar un campo por completo de un documento MongoDB?

Resuelto TIMEX asked hace 13 años • 18 respuestas
{ 
    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
     }
}
TIMEX avatar Jul 28 '11 05:07 TIMEX
Aceptado

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});
Shaunak avatar Jul 27 '2011 22:07 Shaunak

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 $unsetel 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).

Salvador Dali avatar Nov 10 '2013 07:11 Salvador Dali
db.example.updateMany({},{"$unset":{"tags.words":1}})

También podemos usar esto para actualizar múltiples documentos.

Vipul Pandey avatar Oct 16 '2017 13:10 Vipul Pandey