Ovenstående kode fungerer, mine data var dårlige. Som jeg skrev i kommentaren ovenfor, havde nogle af dokumenterne isFoo som en streng (ikke boolesk), og det var derfor, jeg så de blandede resultater.
Jeg var nødt til at ændre feltets type fra String til Boolean, så jeg prøvede dette:
db.users.find( { 'isFoo' : { $exists : true } } ).forEach( function (x) { x.isFoo = new Boolean(x.isFoo); db.users.save(x); });
Men det gjorde bare alle isFoo-felterne til objekter.
Da jeg var virkelig træt af at håndtere dette problem, brugte jeg bare følgende til at indstille alle isFoo-felterne til falsk og bare håndtere ændringerne manuelt.
db.users.find( { 'isFoo' : { $exists : true } } ).forEach( function (x) { x.isFoo = false; db.users.save(x); });
Dette var meget irriterende.