上記のコードは機能し、データは不良でした。上記のコメントで書いたように、一部のドキュメントには文字列(ブール値ではない)としてisFooが含まれていたため、結果が混在していました。
フィールドのタイプを文字列からブール値に変更する必要があったので、これを試しました:
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); });
これは非常に面倒でした。