Powyższy kod działa, moje dane były złe. Jak napisałem w powyższym komentarzu, niektóre dokumenty miały isFoo jako String (nie Boolean) i dlatego widziałem mieszane wyniki.
Musiałem zmienić typ pola z String na Boolean, więc spróbowałem tego:
db.users.find( { 'isFoo' : { $exists : true } } ).forEach( function (x) { x.isFoo = new Boolean(x.isFoo); db.users.save(x); });
Ale to właśnie zmieniło wszystkie pola isFoo na obiekty.
Widząc, że byłem naprawdę zmęczony radzeniem sobie z tym problemem, po prostu użyłem poniższego, aby ustawić wszystkie pola isFoo na false i po prostu ręcznie obsłużyć zmiany.
db.users.find( { 'isFoo' : { $exists : true } } ).forEach( function (x) { x.isFoo = false; db.users.save(x); });
To było bardzo denerwujące.