默认不在mongoose中工作保存 - 不保存字段

use*_*025 3 mongoose mongodb node.js

我有一个包含以下定义字段的架构:

range: {type: Number, default: 100000, min: 1},
Run Code Online (Sandbox Code Playgroud)

在控制器中我设置范围并保存:

function postPlacard(req, res) {

    // Create a new instance of the Placard model
    var placard = new Placard();

    ...

    placard.range = req.body.range;

    ...

    placard.save(function(err) {
      if (err)
        res.send(err);

      res.json({ message: 'Placard added!', data: placard });
  });
}
Run Code Online (Sandbox Code Playgroud)

如果我在表单中提交没有范围的POST,则会出现问题.在这种情况下,没有范围字段保存到文档中.这显然意味着范围小于其最小值1.

我希望在保存之前未定义范围,然后在保存期间应该应用默认值.

发生了什么导致保存文档中缺少范围,我该如何纠正?

谢谢

Joh*_*yHK 5

您正在尝试此错误,因为placard.range即使req.body.range字段丢失也要分配.这会覆盖range设置的默认值new Placard().

限定您的作业,以便只有在使用以下内容时才会出现该作业:

if (req.body.range !== undefined) {
    placard.range = req.body.range;
}
Run Code Online (Sandbox Code Playgroud)

  • 你的建议是有效的,谢谢.从'为什么'的角度来看,这是(我认为)'未定义'与'未定义'的经典案例.通过将未定义的值分配给范围,mongoose默认操作不会激活.如果范围为"未定义",则默认激活.有关何时应用默认值的选项将是有用的,例如,如果变量未定义则适用.否则,我们有效地验证了两次:一次在我们的代码中,一次使用mongoose验证器.我会进一步研究这个问题. (3认同)