Кодът по-горе работи, данните ми бяха лоши. Както написах в коментара по-горе, някои от документите имаха isFoo като низ (не булев) и затова виждах смесени резултати.
Трябваше да променя типа на полето от String на Boolean, така че опитах това:
db.users.find( { 'isFoo' : { $exists : true } } ).forEach( function (x) { x.isFoo = new Boolean(x.isFoo); db.users.save(x); });
Но това просто превърна всички полета на isFoo в обекти.
Тъй като бях наистина уморен да се занимавам с този проблем, просто използвах следното, за да настроя всички полета на isFoo на false и просто да обработвам промените ръчно.
db.users.find( { 'isFoo' : { $exists : true } } ).forEach( function (x) { x.isFoo = false; db.users.save(x); });
Това беше много досадно.