gpt4 book ai didi

node.js - 如何从 Mongoose 返回的对象中删除属性

转载 作者:行者123 更新时间:2023-12-04 09:46:09 24 4
gpt4 key购买 nike

我正在查询用户集合,但不想发回密码。我的主要观点是我是否可以对 mongodb 对象执行 javascript 操作。这是我的代码:

router.get("/:userId", async (req, res) => {
try {
const user = await User.findById(req.params.userId);
delete user.password;
if (user.parent !== undefined) {
const referrer = await User.findOne({ _id: user.parent });
return res.json({ user, referrer });
}
res.json(user);
} catch (error) {
res.status(400).json(error);
}
});

我得到这个输出

{
"is_deleted": false,
"packages": [],
"_id": "5ed102f3fefa080404db01df",
"name": "parent",
"email": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="10607162757e6450607162757e643e737f7d" rel="noreferrer noopener nofollow">[email protected]</a>",
"gender": "m",
"password": "$2b$10$HTGaoy.AVmoG/A0c/vkikO0NnEBte7f2tvwt2FQE94bZlNiYTeX8i",
"__v": 0
}

我尝试对 mongodb 对象列表执行过滤,但也失败了。

最佳答案

您可以解构从查询返回的对象

const {password, ...restProps } = await User.findById(req.params.userId);
const user = restProps;

您还可以配置您的User模型,以便默认情况下从查询结果中排除password字段。

const UserSchema = new mongoose.Schema({
...
password: {
...
select: false
}
});

如果您不想默认排除某个字段,可以调用 select 函数并指定您不想包含在查询结果中的属性。

const user = await User.findById(req.params.userId).select('-password');

有关此内容的更多信息,请参阅 SchemaType.prototype.select()

关于node.js - 如何从 Mongoose 返回的对象中删除属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62102434/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com