Javascript 为什么负零会在插入时触发错误

Javascript 为什么负零会在插入时触发错误,javascript,angularjs,node.js,mongodb,mongoose,Javascript,Angularjs,Node.js,Mongodb,Mongoose,我定义了一个模式,其中某些字段的默认值为零。然后,当通过表单进行插入时,我必须对这些值求反,并且某些字段可能不存在(因此可以默认为零) 这是模式: module.exports = mongoose.model('Acontecimiento', { campo : {type : String, required: true}, titular: {type: String, required: true}, fecha : {type : Date, default:

我定义了一个模式,其中某些字段的默认值为零。然后,当通过表单进行插入时,我必须对这些值求反,并且某些字段可能不存在(因此可以默认为零)

这是模式:

module.exports = mongoose.model('Acontecimiento', {
    campo : {type : String, required: true},
    titular: {type: String, required: true},
    fecha : {type : Date, default: Date.now, required: true},
    tipo : {type : String, required: true},
    brucelosis : {type : Number, default: 0},
    vacas : {type : Number, default: 0},
    toros : {type : Number, default: 0},
    novillitos : {type : Number, default: 0},
    vaquillonas : {type : Number, default: 0},
    terneras : {type : Number, default: 0},
    terneros : {type : Number, default: 0},
});
我不知道为什么,但例如,如果我在每个字段上都加上零,插入就会起作用,但如果我将其中一些字段留空(以便可以通过mongoose模式默认),则会触发错误

这是我的代码:

   app.post('/api/acontecimiento', function(req, res) {
           if (req.body.tipo.a != undefined) {
             var insert = [
               {
                 campo : req.body.campo,
                 titular : req.body.titular,
                 fecha : req.body.fecha,
                 tipo : req.body.tipo.tipo,
                 brucelosis : - req.body.brucelosis,
                 vacas : - req.body.vacas,
                 toros : - req.body.toros,
                 novillitos : - req.body.novillitos,
                 vaquillonas : - req.body.vaquillonas,
                 terneras : - req.body.terneras,
                 terneros : - req.body.terneros
               },
               {
                 campo : req.body.tipo.a,
                 titular : req.body.titular,
                 fecha : req.body.fecha,
                 tipo : req.body.tipo.tipo,
                 brucelosis : req.body.brucelosis,
                 vacas : req.body.vacas,
                 toros : req.body.toros,
                 novillitos : req.body.novillitos,
                 vaquillonas : req.body.vaquillonas,
                 terneras : req.body.terneras,
                 terneros : req.body.terneros
               }
             ];
             Acontecimiento.create(insert, function(err, translado, transladado) {
               if (err) {
                     res.json({ success: false, message: 'Campo, titular, fecha y tipo de operacion deben especificarse'});
                  } else {
                    res.json({ success: true, message: 'Nueva operacion guardada'});
                  };
             });
           };
   });

另外,如果我去掉否定项,一切都会正常工作,即使有些字段是空的,也会进行两次插入。这就是为什么我假设在尝试通过模式否定默认值时出现问题,并且一些字段可能不存在(因此可以默认为零)“不,不是,它是未定义的,这是完全不同的事情。相反,在尝试访问属性或类似地在转换过程中迭代键之前,应该使用as in
if(req.body.hashOwnProperty('vacas'){
测试属性是否存在。另外,这就像这些根本不是数字,而是“字符串”。这是存在的任何正文后数据的默认值。您好Fjallbacka-您能显示您得到的错误吗?@NeilLunn是的,如果该字段为空,因为我的架构有一个默认值,那么将分配一个零。除我在此处指定的用例外,它完全适用于所有用例