2

我想发出一个 Mongo FindAndModify 请求,该请求通过电子邮件和密码找到用户,然后在一个请求中更新它,使其成为原子的。使用基本的 MD5 哈希密码和预定义的盐,我会在请求之前计算哈希并发出以下请求:

db.people.findAndModify( {
    query: { email: "a@a.com", password: "<hashed value>"},
    update: { $set: { myField: "myNewValue" } }
} );

但是 bcrypt 密码每次都不相同,因为每次生成哈希时使用不同的盐,所以这种方法不起作用。目前我必须通过电子邮件找到一个用户并使用 BCrypt.checkPassword 函数在代码中检查他的密码,如果它返回 true,则更新我在数据库中的值。所以我最终做了 2 个请求,它在 Mongo 中不是原子的。

那么有没有办法在一个 MongoDB 请求中做到这一点(与 bcrypt 哈希和更新相比)?(我在 Mongo 网站上看到了一篇关于如何手动实现 2 阶段提交的文章,但想知道是否有一个干净而好的解决方案)。

4

0 回答 0