Réponses:
Essayez ceci: si votre collection était un «exemple»
db.example.update({}, {$unset: {words:1}}, false, true);
Référez ceci:
http://www.mongodb.org/display/DOCS/Updating#Updating-%24unset
MISE À JOUR :
Le lien ci-dessus ne couvre plus «$ unset». 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 ceci pour une documentation mise à jour:
https://docs.mongodb.com/manual/reference/operator/update/unset/
Exemple:
db.example.update({}, {$unset: {words:1}} , {multi: true});
tags.words
devrait l'être $unset
, non words
? Voir aussi la réponse de Salvador Dali.
updateMany
place de {multi:true}
, c'estdb.example.updateMany({},{"$unset":{words:""}})
Au début, je n'ai pas compris pourquoi la question a une prime (je pensais que la question a une bonne réponse et il n'y a rien à ajouter), mais j'ai ensuite remarqué que la réponse qui a été acceptée et votée 15 fois était en fait fausse!
Oui, vous devez utiliser l' $unset
opérateur , mais cette suppression 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 dire à Mongo de regarder dans les balises du document puis dans les mots en utilisant la notation par points . Donc, la bonne requête est.
db.example.update(
{},
{ $unset: {'tags.words':1}},
false, true
)
Juste pour être complet, je ferai référence à 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 un champ dans MongoDB
Pour un seul enregistrement
db.getCollection('userData').update({}, {$unset: {pi: 1}})
Pour Multi Record
db.getCollection('userData').update({}, {$unset: {pi: 1}}, {multi: true})
J'essayais de faire quelque chose de similaire à cela, mais à la place, supprimez la colonne d'un document incorporé. Il m'a fallu un certain temps pour trouver une solution et c'était le premier message que j'ai rencontré, donc j'ai pensé que je publierais ceci ici pour toute autre personne essayant de faire de même.
Disons donc à la place que vos données ressemblent à ceci:
{
name: 'book',
tags: [
{
words: ['abc','123'],
lat: 33,
long: 22
}, {
words: ['def','456'],
lat: 44,
long: 33
}
]
}
Pour supprimer la colonne words
du document incorporé, procédez comme suit:
db.example.update(
{'tags': {'$exists': true}},
{ $unset: {'tags.$[].words': 1}},
{multi: true}
)
ou en utilisant le updateMany
db.example.updateMany(
{'tags': {'$exists': true}},
{ $unset: {'tags.$[].words': 1}}
)
Le $unset
ne le modifiera que si la valeur existe mais il ne fera pas une navigation sûre (il ne vérifiera pas s'il tags
existe en premier) donc l'existant est nécessaire sur le document incorporé.
Il utilise l' opérateur all positional ( $[]
) qui a été introduit dans la version 3.6
Par défaut, la méthode update () met à jour un seul document. Définissez le paramètre multiple 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})
Au départ Mongo 4.2
, il est également possible d'utiliser une syntaxe légèrement différente:
// { 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 méthode de mise à jour peut également accepter un pipeline d'agrégation (notez les crochets au carré signifiant l'utilisation d'un pipeline d'agrégation).
Cela signifie que l' $unset
opérateur utilisé est celui d'agrégation (par opposition à celui de "requête" ), dont la syntaxe prend un tableau de champs.
La solution pour PyMongo (Python mongo):
db.example.update({}, {'$unset': {'tags.words':1}}, multi=True);
{name: 'book', tags: {mots: ['abc', '123'], lat: 33, long: 22}}
Rép:
db.tablename.remove ({'tags.words': ['abc', '123']})
Vérification de l'existence de "mots" puis suppression du document
db.users.update({"tags.words" :{$exists: true}},
{$unset:{"tags.words":1}},false,true);
true indique la mise à jour de plusieurs documents s'ils correspondent.