mongoose模式中的数字types总是保存为string

我有这个简单的模式,与联系数字数据types。 奇怪的是,input数据(联系人)总是被保存为mongodb中的string。 我不知道背景中发生了什么,或者我错过了什么。

var mongoose = require('mongoose'); var memberSchema = new mongoose.Schema({ . . Other fields are not shown/ necessary . contact: { type: Number, required: true, } }); module.exports = mongoose.model('Member',memberSchema); 

在我的路由文件中,我发送用户数据以便像这样添加到数据库中

 exports.post = function(req,res,next){ if(!req.body.name || !req.body.email || !req.body.contact) return res.render('index', {error: 'Fill Name, Email and Contact'}); //req.body.contact = parseInt(req.body.contact); var member = { name: req.body.name, email: req.body.email, contact: req.body.contact } 

正如你所看到的,req.body.contact是用户在表单中input的内容,我通过它。

问题是,要么我不理解实际的概念,要么我必须做更多的事情。 注:我没有使用任何明确或mongoosevalidation中间件。

任何帮助将不胜感激。

您可以使用正则expression式来testing联系人值。 以下示例显示了使用正则expression式对10位数字进行validation的自定义validation器。 自定义validation是通过传递validation函数来声明的:

 var memberSchema = new Schema({ contact: { type: Number, validate: { validator: function(v) { return /d{10}/.test(v); }, message: '{VALUE} is not a valid 10 digit number!' } } }); var Member = mongoose.model('Member', memberSchema); var m = new Member(); m.contact = '123456789'; // Prints "ValidationError: 123456789 is not a valid 10 digit number!" console.log(m.validateSync().toString()); m.contact = 0123456789; // Prints undefined - validation succeeded! console.log(m.validateSync());