2011-07-27 38 views
171
{ 
    name: 'book', 
    tags: { 
     words: ['abc','123'], 
     lat: 33, 
     long: 22 
    } 
} 

Supongamos que se trata de un documento. ¿Cómo elimino "words" por completo de todos los documentos de esta colección? Quiero que todos los documentos sean sin "words":¿Cómo eliminar un campo completamente de un documento MongoDB?

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

Respuesta

300

Prueba esto: Si su colección era 'ejemplo'

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

Consulte la siguiente:

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

ACTUALIZACIÓN :

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. Ver esta documentación actualizada:

https://docs.mongodb.com/manual/reference/operator/update/unset/

Ejemplo:

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

¿Sabes por qué funciona el falso y verdadero? –

+61

Las versiones más recientes admiten un formato más legible: 'db.example.update ({}, {$ unset: {words: 1}}, {multi: true})' –

+2

db.example.update ({}, {$ unset : {field: 1, multi: true}}) La consulta de Nic no funcionó para mí. –

103

Al principio yo no entiendo por qué la pregunta tiene una recompensa (pensé que la pregunta tiene una respuesta agradable y hay nada que agregar), pero luego noté que la respuesta que fue aceptada y votada 15 veces en realidad era incorrecta.

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

por lo que necesita para contar mongo a buscar en las etiquetas del documento y luego en las palabras usando dot notation. Entonces la consulta correcta es

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

Sólo por el bien de finalización me referiré a another way of doing it, que es mucho peor, pero de esta manera se puede cambiar el campo con cualquier código personalizado (incluso basa en otro campo de este documento).

0

Verificando "palabras" existe y luego retirar del documento

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

true indica actualizar varios documentos si se hace corresponder.

-6

Para hacer referencia a un paquete y retire varias "claves", probar esto

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

Para eliminar o borrar campo en MongoDB

  • Por solo registro

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

    db.getCollection('userData').update({}, {$unset: {pi: 1}}, {multi: true}) 
    
-2

también se puede hacer esto en la agregación mediante el uso de proyecto en el 3,4

{proyecto $: { "tags.words": 0}}

0
db.example.updateMany({},{"$unset":{"tags.words":1}}) 

También puede utilízalo para actualizar varios documentos.

Cuestiones relacionadas