J'ai été surpris de constater que l'exemple de code suivant ne met à jour qu'un seul document:
> db.test.save({"_id":1, "foo":"bar"});
> db.test.save({"_id":2, "foo":"bar"});
> db.test.update({"foo":"bar"}, {"$set":{"test":"success!"}});
> db.test.find({"test":"success!"}).count();
1
Je sais que je peux boucler et continuer à mettre à jour jusqu'à ce qu'ils soient tous modifiés, mais cela semble terriblement inefficace. Y a-t-il un meilleur moyen?
À partir de la v3.3, vous pouvez utiliser updateMany
Dans la v2.2, la fonction de mise à jour prend la forme suivante:
https://docs.mongodb.com/manual/reference/method/db.collection.update/
la source
Pour la version Mongo> 2.2 , ajoutez un champ multi et définissez-le sur true
la source
J'ai créé un moyen de le faire avec une meilleure interface.
db.collection.find({ ... }).update({ ... })
- mise à jour multipledb.collection.find({ ... }).replace({ ... })
- remplacement uniquedb.collection.find({ ... }).upsert({ ... })
- simple upsertdb.collection.find({ ... }).remove()
- multi supprimerVous pouvez également appliquer une limite, ignorer, trier les mises à jour et les suppressions en les chaînant au préalable.
Si vous êtes intéressé, consultez Mongo-Hacker
la source
db.userActivity.find({ 'appId' : 1234, 'status' : 1}).update({ $set: { 'status': 1 } }); 2017-06-05T17:47:10.038+0530 E QUERY [thread1] TypeError: db.userActivity.find(...).update is not a function :
Dans le client MongoDB, saisissez:
Nouveau dans la version 3.2
Paramètres ::
Argument de mot-clé
multi
non prisla source
MongoDB ne trouvera qu'un seul document correspondant qui correspond aux critères de requête lorsque vous émettez une commande de mise à jour, le document correspondant en premier à être mis à jour, même s'il y a plus de documents correspondant aux critères, il sera ignoré.
donc pour surmonter cela, nous pouvons spécifier l'option "MULTI" dans votre déclaration de mise à jour, ce qui signifie mettre à jour tous les documnets qui correspondent aux critères de requête. rechercher tous les documnets de la collection pour trouver ceux qui correspondent aux critères et mettre à jour:
la source
La commande suivante peut mettre à jour plusieurs enregistrements d'une collection
la source
J'ai eu le même problème, et j'ai trouvé la solution, et ça marche comme un charme
définissez simplement le drapeau multi sur true comme ceci:
j'espère que ça aide :)
la source
Pour mettre à jour toute la collection,
la source
Vous pouvez utiliser. »
la source
Toutes les dernières versions de mongodb updateMany () fonctionne correctement
la source
Merci de partager cela, j'ai utilisé avec 2.6.7 et la requête suivante vient de fonctionner,
pour tous les documents:
pour un seul document:
la source