如何从 mongodb 获取的对象中删除键? [复制]

Posted

技术标签:

【中文标题】如何从 mongodb 获取的对象中删除键? [复制]【英文标题】:how to delete a key from fetched object from mongodb? [duplicate] 【发布时间】: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 输出吗? 【参考方案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 
);

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

【讨论】:

以上是关于如何从 mongodb 获取的对象中删除键? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

mongodb如何删除集合中的指定键值对???

如何通过使用位置 url 从 Node mongo 中删除 s3 对象?

如何从 MongoDB 集合中获取具有匹配键的最后 N 个元素

如何从 MongoDB 集合中获取具有匹配键的最后 N 个元素

如何使用 Spring Boot 和 MongoDB 从 JSON 列表中删除对象

使用 Mongoose 从 MongoDB 文档中删除一个键