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

Supongamos que este es un documento. ¿Cómo puedo eliminar «words» completamente de todos los documentos de esta colección? Quiero que todos los documentos, sin «words«:

 { 
     name: 'book',
     tags: {
         lat: 33,
         long: 22
     }
}
InformationsquelleAutor TIMEX | 2011-07-27

12 Comentarios

  1. 451

    Intente esto: Si su colección fue ‘ejemplo’

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

    Se refieren a esto:

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

    ACTUALIZACIÓN:

    El enlace de arriba ya no cubre ‘$unset ing. Asegúrese de agregar {multi: true} si desea quitar este campo a partir de todos los documentos en la colección; de lo contrario, sólo quitará de ella desde el primer documento se encuentra que de los partidos. Ver la documentación actualizada:

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

    Ejemplo:

    db.example.update({}, {$unset: {words:1}} , {multi: true});
    • ¿Sabes por qué las falsas,verdaderas obras?
    • Ver la solución a esta pregunta para la explicación de falso/verdadero stackoverflow.com/questions/7714216/…
    • Ya no hay un comentario de un «Nic Cottrell» en cualquier parte de esta página 🙂
    • Me estoy perdiendo algo, o que ha sido mal por más de 8 años, porque tags.words debe ser $unset, no words? Véase también Salvador Dalí respuesta.
  2. 148

    Al principio, yo no se por qué la pregunta tiene una recompensa (pensé que la pregunta tiene una buena respuesta y no hay nada que añadir), pero luego me di cuenta de que la respuesta de la cual fue aceptada y upvoted 15 veces estaba mal!

    Sí, usted tiene que utilizar $unset operador, pero este unset va a quitar las palabras clave que no existe un documento de una colección. Así que, básicamente, no hará nada.

    Por lo que usted necesita decirle a Mongo a buscar en las etiquetas del documento y, a continuación, en las palabras utilizando la notación de punto. Así que la consulta correcta es.

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

    Sólo por el bien de su finalización, me voy a referir a otra forma de hacerlo, que es mucho peor, pero de esta manera usted puede cambiar el campo con el código personalizado (aunque basado en otro campo de este documento).

    • Además de esto, si las etiquetas es una matriz, entonces sería como este: db.ejemplo.update({},{ $unset: {‘etiquetas.$[].palabras’:1}},false, true)
  3. 17

    Para quitar o eliminar de campo en MongoDB

    • Para el Registro único

      db.getCollection('userData').update({}, {$unset: {pi: 1}})
    • Para Multi Registro

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

    También podemos usar esto para actualizar varios documentos.

  5. 1

    Por defecto, el método update() de las actualizaciones de un solo documento. Establecer el Multi Parámetro para actualizar todos los documentos que coinciden con los criterios de consulta.

    Cambiado en la versión 3.6.
    Sintaxis :

    db.collection.update(
       <query>,
       <update>,
       {
         upsert: <boolean>,
         multi: <boolean>,
         writeConcern: <document>,
         collation: <document>,
         arrayFilters: [ <filterdocument1>, ... ]
       }
    )

    Ejemplo :

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

    En su ejemplo :

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

    Yo estaba tratando de hacer algo similar a esto, pero en lugar de quitar la columna de un documento incrustado. Me tomó un tiempo para encontrar una solución y este fue el primer post que me encontré así que pensé que iba a publicar esto aquí para cualquier persona tratando de hacer lo mismo.

    Así que vamos a decir, sino que sus datos se parece a esto:

    { 
      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 el uso de la updateMany

    db.example.updateMany(
      {'tags': {'$exists': true}},
      { $unset: {'tags.$[].words': 1}}
    )

    La $unset sólo editarlo si el valor existe pero no lo hará de una navegación segura (no lo puedo comprobar si tags existe primero) así que el que existe es necesaria en el documento incrustado.

    Para ello se utiliza el todos posicional operador ( $[] ), que fue introducido en la versión 3.6

  7. 1

    De partida Mongo 4.2, también es posible utilizar una sintaxis diferente:

    //{ name: "book", tags: { words: ["abc", "123"], lat: 33, long: 22 } }
    db.collection.update({}, [{ $unset: ["tags.words"] }], { many: true })
    //{ name: "book", tags: { lat: 33, long: 22 } }

    La actualización método también puede aceptar una agregación de tubería (nota de los cuadrados de los soportes que significa el uso de una agregación de la tubería).

    Esto significa que el $unset operador utilizado es el de la agregación de uno (como opuesto a la «la consulta» uno), cuya sintaxis toma un array de campos.

  8. 0

    Y para mongomapper,

    • Documento: Cierre
    • Campo para quitar: shutoff_type

    Shutoff.collection.update( {}, { '$unset' => { 'shutoff_type': 1 } }, :multi => true )

  9. -2

    {
    nombre: ‘libro’,
    etiquetas: {
    palabras: [‘abc’,’123′],
    lat: 33,
    largo: 22
    }
    }

    Ans:

    db.tablename.quitar({‘etiquetas.palabras’:[‘abc’,’123′]})

  10. -3

    La comprobación de si las «palabras» existe y, a continuación, retirar del documento

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

    true indica que la actualización de varios documentos si corresponde.

    • No es necesario comprobar la existencia. El estados de documentación que :»Si el campo no existe, entonces $unset no hace nada (es decir, sin operación).»
  11. -4

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

    {$proyecto: {«etiquetas.las palabras»: 0} }

  12. -7

    Para hacer referencia a un paquete y eliminar los distintos «claves»,
    pruebe este

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

Dejar respuesta

Please enter your comment!
Please enter your name here