node.js - 如何保护 Mongoose/MongoDB 中的密码字段,以便在填充集合时它不会

假设我有两个集合/模式。一个是带有用户名和密码字段的用户架构,然后,我有一个博客架构,它在作者字段中引用了用户架构。如果我使用 Mongoose 做类似的事情

Blogs.findOne({...}).populate("user").exec()

我也将填充博客文档和用户,但是如何防止 Mongoose/MongoDB 返回密码字段?密码字段经过哈希处理,但不应返回。

我知道我可以省略密码字段并在一个简单的查询中返回其余字段,但我如何使用填充来做到这一点。另外,有什么优雅的方法可以做到这一点?

另外,在某些情况下,我确实需要获取密码字段,例如当用户想要登录或更改密码时。

最佳答案

您可以使用 select 在架构定义级别更改默认行为字段属性:

password: { type: String, select: false }

然后您可以根据需要在 findpopulate 调用中通过字段选择作为 '+password' 将其拉入。例如:

Users.findOne({_id: id}).select('+password').exec(...);

关于node.js - 如何保护 Mongoose/MongoDB 中的密码字段,以便在填充集合时它不会在查询中返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12096262/

相关文章:

mongodb - 将 mongo 查询的输出重定向到 csv 文件

python - MongoKit vs MongoEngine vs Flask-MongoAlc

mongodb - Mongoose 唯一索引不起作用!

node.js - 在 OSX 上安装和运行 MongoDB

linux - MongoDB GUI 客户端(跨平台或 Linux)

MongoDB - 分页

mongodb - MongoDB 的 $in 子句是否保证顺序

javascript - 如何使用 Mongoose 从集合中删除所有文档?

node.js - Mongoose,更新对象数组中的值

mongodb - 有没有一种简单的方法可以从 meteor 部署的应用程序中导出数据?