¿Cómo eliminar un campo completamente de un documento MongoDB?

{ name: 'book', tags: { words: ['abc','123'], lat: 33, long: 22 } } 

Supongamos que este es un documento. ¿Cómo elimino ” words ” por completo de todos los documentos en esta colección? Quiero que todos los documentos estén sin ” words “:

  { name: 'book', tags: { lat: 33, long: 22 } } 

Pruebe esto: si su colección fue ‘ejemplo’

 db.example.update({}, {$unset: {words:1}}, false, true); 

Refiere esto:

http://www.mongodb.org/display/DOCS/Updating#Updating-%24unset

ACTUALIZAR :

El enlace de arriba ya no cubre ‘$ desarmando’. El comentario de Nic Cottrell a continuación es el camino a seguir ahora. Asegúrese de agregar {multi: true} si desea eliminar este campo de todos los documentos de la colección; de lo contrario, solo lo eliminará del primer documento que encuentre que coincida. Consulte esto para la 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 tenía una buena respuesta y no había nada que agregar), pero luego noté que la respuesta que fue aceptada y votada 15 veces en realidad era incorrecta.

Sí, debe usar el operador $unset , pero este desarmado eliminará la tecla de palabras que no existe para un documento de una colección. Entonces, básicamente, no hará nada.

Entonces debes decirle a Mongo que mire en las tags del documento y luego en las palabras usando la notación de puntos . Entonces la consulta correcta es

 db.example.update( {}, { $unset: {'tags.words':1}}, false, true ) 

Solo para completarlo, me referiré a otra forma de hacerlo , que es mucho peor, pero de esta manera puede cambiar el campo con cualquier código personalizado (incluso en función de otro campo de este documento).

Para eliminar o eliminar el campo en MongoDB

  • Para registro individual

     db.getCollection('userData').update({}, {$unset: {pi: 1}}) 
  • Para registro múltiple

     db.getCollection('userData').update({}, {$unset: {pi: 1}}, {multi: true}) 
 db.example.updateMany({},{"$unset":{"tags.words":1}}) 

También podemos usar esto para actualizar varios documentos.

Verificando si existen “palabras” y luego eliminando del documento

  db.users.update({"tags.words" :{$exists: true}}, {$unset:{"tags.words":1}},false,true); 

true indica actualizar varios documentos si coinciden.

De forma predeterminada, el método update () actualiza un único documento. Establezca el parámetro múltiple para actualizar todos los documentos que coincidan con los criterios de consulta.

Modificado en la versión 3.6. Sintaxis:

 db.collection.update( , , { upsert: , multi: , writeConcern: , collation: , arrayFilters: [ , ... ] } ) 

Ejemplo:

 db.getCollection('products').update({},{$unset: {translate:1, qordoba_translation_version:1}}, {multi: true}) 

En tu ejemplo:

 db.getCollection('products').update({},{$unset: {'tags.words' :1}}, {multi: true}) 

También puedes hacer esto en agregación usando project en 3.4

{$ project: {“tags.words”: 0}}

Para hacer referencia a un paquete y eliminar varias “claves”, intente esto

 db['name1.name2.name3.Properties'].remove([ { "key" : "name_key1" }, { "key" : "name_key2" }, { "key" : "name_key3" } )]