Comment supprimer complètement un champ d'un document MongoDB?

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

Supposons qu'il s'agisse d'un document. Comment supprimer complètement "words " de tous les documents de cette collection? Je veux que tous les documents soient sans "words":

 { 
     name: 'book',
     tags: {
         lat: 33,
         long: 22
     }
}
201
demandé sur Community 2011-07-28 02:17:50

8 réponses

Essayez ceci: si votre collection était 'example'

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

Référez-vous à ceci:

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

Mise à jour :

Le lien ci-dessus ne couvre plus '$unset ' ing. Le commentaire de Nic Cottrell ci-dessous est le chemin à parcourir maintenant. Assurez-vous d'ajouter {multi: true} Si vous souhaitez supprimer ce champ de tous les documents de la collection; sinon, il ne le supprimera que du premier document qu'il trouve correspondant. Voir ce pour documentation Mise à jour:

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

Exemple:

db.example.update({}, {$unset: {words:1}} , {multi: true});
369
répondu Shaunak 2016-07-29 19:49:26

Au début, je n'ai pas compris pourquoi la question avait une prime (je pensais que la question avait une bonne réponse et qu'il n'y avait rien à ajouter), mais j'ai remarqué que la réponse qui avait été acceptée et votée 15 fois était en fait fausse!

Oui, vous devez utiliser $unset opérateur , mais ce désactivé va supprimer la clé de mots qui n'existe pas pour un document pour une collection. Donc, fondamentalement, il ne fera rien.

Donc, vous devez dire à Mongo de regarder dans le document tags et ensuite dans les mots en utilisant notation par points . Donc la bonne requête.

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

Juste pour l'achèvement, je vais me référer à une autre façon de le faire, ce qui est bien pire, mais de cette façon vous pouvez changer le champ avec n'importe quel code personnalisé (Même basé sur un autre champ de ce document).

125
répondu Salvador Dali 2018-07-25 11:44:43

Pour supprimer ou supprimer des champs dans MongoDB

  • Pour un seul enregistrement

    db.getCollection('userData').update({}, {$unset: {pi: 1}})
    
  • Pour Enregistrement Multiple

    db.getCollection('userData').update({}, {$unset: {pi: 1}}, {multi: true})
    
15
répondu Viral Patel 2017-08-23 07:36:24
db.example.updateMany({},{"$unset":{"tags.words":1}})

Nous pouvons également l'utiliser pour mettre à jour plusieurs documents.

4
répondu Vipul 2017-10-16 13:41:33

Par défaut, la méthode update () met à jour un seul document. Définissez le paramètre Multi pour mettre à jour tous les documents qui correspondent aux critères de requête.

Modifié dans la version 3.6. Syntaxe:

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

Exemple :

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

Dans votre exemple :

db.getCollection('products').update({},{$unset: {'tags.words' :1}},  {multi: true})
0
répondu FullStack 2018-08-09 18:07:46

Vérifier si "words" existe, puis supprimer du document

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

True indique mettre à jour plusieurs documents s'ils correspondent.

-1
répondu Abhi 2014-08-24 22:05:08

Vous pouvez également le faire en agrégation en utilisant project à 3.4

{$projet: {"balises.les mots": 0} }

-3
répondu joel Raja 2017-08-02 08:49:12

Pour référencer un paquet et supprimer diverses " clés", essayez ceci

db['name1.name2.name3.Properties'].remove([
{
     "key" : "name_key1"
},
{
     "key" : "name_key2"
},
{
     "key" : "name_key3"
}
)]
-6
répondu aspadacio 2015-09-17 05:21:43