【问题标题】:how to delete a key from fetched object from mongodb? [duplicate]如何从 mongodb 获取的对象中删除键? [复制]
【发布时间】:2018-04-16 23:43:15
【问题描述】:

我知道有人问过see this,但答案是直接修改数据库,但在这种情况下,我想从用户对象中删除密码,这样密码就不会发送到前端,但delete 是尽管user 是一个对象,但无法正常工作。

User.find({}).then(function(users) {
    let counter = 1;
    users.forEach(function(user) {
        delete user.password;
        console.log("after delete",user) // password key/value exist

        userMap[counter] = user;
        counter++;
    });

    return userMap;
});

任何想法!我正在使用猫鼬

【问题讨论】:

  • 应该可以的。你确定用户有一个完全命名为“密码”的字段。你也可以显示你的 console.log 输出吗?

标签: node.js mongodb


【解决方案1】:

您正在尝试在 Mongoose 包装器对象上使用 delete 关键字。 delete 关键字将与本机 Javascript 对象一起使用。为此,您需要使用 Mongoose 提供的lean() 函数。

试试这个 -

User.find({}).lean().then

我刚刚在 find 查询之后添加了 lean() 函数。现在可以使用delete 关键字修改您的对象。

【讨论】:

    【解决方案2】:

    为什么不从查询本身中排除密码? find 的第二个参数让您在结果中包含/排除键。

    User.find({}, { "password": 0 }).then(function(users) {
      // The users should not contain the password key here
    });
    

    我认为这可以从Mongoose v4.0.0 获得。同样,你也可以在 find 之后使用 select 操作符。

    User.find({}).select({ "name": 1 }).then(function(users) {
      // Do something 
    });
    

    这个查询只会选择用户的名字。

    【讨论】:

      猜你喜欢
      • 2016-02-28
      • 2018-05-27
      • 2011-03-28
      • 2015-11-05
      • 1970-01-01
      • 2019-08-07
      • 1970-01-01
      相关资源
      最近更新 更多