首页 > 解决方案 > Mongoose 构建查询以更新多个字段

问题描述

我想创建一个端点,它将更新一个集合中的多个字段,但不是每个字段,而且我不知道确切的字段数量。

因此,例如我的 user.model 包含诸如email, password, name,之类的字段active。现在我想创建将允许更改nameandpassword但不允许更改的端点emailand 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' } }
)

但是如何处理我不知道将要发送的字段数量(上例中的一个或两个)并且我不想让更新每个字段(禁止emailactive上例中)?

标签: mongodbmongoose

解决方案


你可以尝试这样的事情:

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 }
    )
}

推荐阅读