猫鼬构建查询以更新多个字段

时间:2019-07-03 12:52:35

标签: mongodb mongoose

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

例如,我的user.model包含emailpasswordnameactive之类的字段。现在,我想创建一个端点,该端点将允许更改namepassword,但不能更改emailactive。另外,它可以一次或同时更改两个值,具体取决于发送的内容。因此,如果我像这样将其传递给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 }}中的示例)?

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