電子メールとパスワードでユーザーを検索し、1 つの要求でそれを更新する Mongo FindAndModify 要求をアトミックに作成したいと考えています。基本的な MD5 ハッシュ化されたパスワードと定義済みのソルトを使用して、リクエストの前にハッシュを計算し、次のリクエストを行います。
db.people.findAndModify( {
query: { email: "a@a.com", password: "<hashed value>"},
update: { $set: { myField: "myNewValue" } }
} );
ただし、ハッシュ生成ごとに異なるソルトが使用されるため、bcrypt パスワードは毎回同じではなく、このアプローチは機能しません。現在、私は電子メールだけでユーザーを見つけ、BCrypt.checkPassword 関数を使用してコードでパスワードを確認し、true が返された場合はデータベースの値を更新する必要があります。そのため、2 つのリクエストを実行することになり、Mongo ではアトミックではありません。
それで、1つのMongoDBリクエストでそれを行う方法はありますか(bcryptハッシュと更新と比較してください)? (Mongo の Web サイトで、2 フェーズ コミットを手動で実装する方法に関する記事を見たことがありますが、クリーンで優れた解決策があるかどうか疑問に思っています)。