我在MongoDB / Mongoose中有一个数据库,我有一组用户,我用它们进行身份验证,并作为要在前端显示的联系人列表。
当我想显示联系人列表时,我不想将用户的密码发送给用户,因此在发送列表之前要将其从集合中删除。
所以我有类似的东西
readAll(req, res, next) {
User.find()
.then(users => {
users.forEach(user => {
delete user.password;
});
res.send(users);
})
.catch(next)
},
现在正在运作;即使delete user.password
返回true,它也不会删除任何内容。
由于User是我在Mongoose中定义为ModelSchema的类,因此密码是原型的一部分,因此无法像这样删除。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete
我尝试过这样的事情
delete User.prototype.password;
但它什么也没做。
我该怎么做? 感谢
答案 0 :(得分:1)
在查询级别,您可以使用projection选择/取消选择您想要的字段,例如
readAll(req, res, next) {
User.find({}, '-password')
.then(users => {
res.send(users);
})
.catch(next)
},
或使用查询 select()
方法
readAll(req, res, next) {
User.find().select('-password')
.then(users => {
res.send(users);
})
.catch(next)
},
另一种方法是在模式定义级别更改字段的select属性,例如:
email: { type: String },
password: {
type: String,
select: false
},
...
并正常查询:
readAll(req, res, next) {
User.find()
.then(users => {
res.send(users);
})
.catch(next)
},