如何从MongoDB中的对象数组中删除原型中的属性?

时间:2017-02-16 14:51:12

标签: javascript mongodb

我在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; 但它什么也没做。

我该怎么做? 感谢

1 个答案:

答案 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)
},