假设我有两个集合/模式。一个是带有用户名和密码字段的用户架构,然后,我有一个博客架构,它在作者字段中引用了用户架构。如果我使用 Mongoose 做类似的事情
Blogs.findOne({...}).populate("user").exec()
我也将填充博客文档和用户,但是如何防止 Mongoose/MongoDB 返回密码字段?密码字段经过哈希处理,但不应返回。
我知道我可以省略密码字段并在一个简单的查询中返回其余字段,但我如何使用填充来做到这一点。另外,有什么优雅的方法可以做到这一点?
另外,在某些情况下,我确实需要获取密码字段,例如当用户想要登录或更改密码时。
最佳答案
您可以使用 select
在架构定义级别更改默认行为字段属性:
password: { type: String, select: false }
然后您可以根据需要在 find
和 populate
调用中通过字段选择作为 '+password'
将其拉入。例如:
Users.findOne({_id: id}).select('+password').exec(...);
关于node.js - 如何保护 Mongoose/MongoDB 中的密码字段,以便在填充集合时它不会在查询中返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12096262/