我想创建一个端点,该端点将更新一个集合中的多个字段,但不是每个字段,而且我不知道确切的字段数量。
例如,我的user.model包含email
,password
,name
,active
之类的字段。现在,我想创建一个端点,该端点将允许更改name
和password
,但不能更改email
和active
。另外,它可以一次或同时更改两个值,具体取决于发送的内容。因此,如果我像这样将其传递给JSON:
{ "password":"someNewPass" }
它将更新密码,但不会涉及其他字段,也不会在我发送JSON时显示以下信息:
{ "password":"someNewPass", "name":"John Smith" }
然后它将更新两个值,但是当我这样发送JSON
{ "password":"someNewPass", "name":"John Smith", "active":false }
它将不允许执行该操作并提供禁止状态或其他内容。
我知道我可以像这样更新多个字段:
await User.findOneAndUpdate(
{ 'resetPasswordKey': req.query.key },
{ $set: { 'password': newPasswordHash, 'name': 'John Smith' } }
)
但是如何处理我不知道将要发送的字段数量(在上面的示例中是一两个),并且我不想让每个字段都更新(禁止email
和{{1 }}中的示例)?
答案 0 :(得分:1)
您可以尝试以下操作:
let update = { "password":"someNewPass", "name":"John Smith", "active":false }
if(update.hasOwnProperty('active'))
{
throw 'forbidden';
}
else
{
await User.findOneAndUpdate(
{ 'resetPasswordKey': req.query.key },
{ $set: update }
)
}