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
}
}
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});
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).
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})
db.example.updateMany({},{"$unset":{"tags.words":1}})
Nous pouvons également l'utiliser pour mettre à jour plusieurs documents.
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})
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.
Vous pouvez également le faire en agrégation en utilisant project à 3.4
{$projet: {"balises.les mots": 0} }
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"
}
)]