Le code ci-dessus fonctionne, mes données étaient mauvaises. Comme je l'ai écrit dans le commentaire ci-dessus, certains des documents avaient isFoo comme chaîne (pas booléenne) et c'est pourquoi je voyais des résultats mitigés.
J'ai dû changer le type du champ de String en Boolean, j'ai donc essayé ceci :
db.users.find( { 'isFoo' : { $exists : true } } ).forEach( function (x) { x.isFoo = new Boolean(x.isFoo); db.users.save(x); });
Mais cela vient de transformer tous les champs isFoo en objets.
Étant donné que j'étais vraiment fatigué de traiter ce problème, j'ai simplement utilisé ce qui suit pour définir tous les champs isFoo sur false et gérer les modifications manuellement.
db.users.find( { 'isFoo' : { $exists : true } } ).forEach( function (x) { x.isFoo = false; db.users.save(x); });
C'était très ennuyeux.