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

Supposons que ce soit un document. Comment puis-je supprimer "words" complètement de tous les documents dans cette collection? Je veux que tous les documents soient sans "words":Comment supprimer complètement un champ d'un document MongoDB?

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

Répondre

300

Essayez ceci: Si votre collection était 'exemple'

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

Reportez-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 la voie à suivre maintenant. Veillez à 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 trouvé. Voir ce pour la documentation mise à jour:

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

Exemple:

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

Savez-vous pourquoi le faux, le vrai fonctionne? –

+61

Les nouvelles versions prennent en charge un format plus lisible: 'db.example.update ({}, {$ unset: {words: 1}}, {multi: true})' –

+2

db.example.update ({}, {$ unset : {field: 1, multi: true}}) La requête de Nic n'a pas fonctionné pour moi. –

103

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

Oui, vous devez utiliser $unset operator, mais cette option va supprimer la clé de mots qui n'existe pas pour un document pour une collection. Donc, fondamentalement, cela ne fera rien.

Vous devez donc demander à mongo de regarder dans les balises de document et ensuite dans les mots en utilisant dot notation. Donc, la bonne requête est.

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

Juste pour être complet, je ferai référence à another way of doing it, ce qui est bien pire, mais cette façon, vous pouvez modifier le champ avec un code personnalisé (même basé sur un autre champ de ce document).

0

vérification "mots" EXISTE puis retirer du document

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

true indique la mise à jour plusieurs documents en cas de correspondance.

-6

Pour faire référence à un paquet et supprimer divers "clés", essayer cette

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

Pour supprimer ou supprimer champ dans MongoDB

  • Pour seul enregistrement

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

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

vous pouvez aussi le faire dans l'agrégation en utilisant projet à 3.4

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

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

Nous pouvons aussi utilisez ceci pour mettre à jour plusieurs documents.

Questions connexes