Mongoose模式中具有默认值的属性不会持久
我有我用Mongoose写的下面的模式:
var querySchema = mongoose.Schema({ quoteId: { type: String, default: '' }, zipcode: { type: String, default: '' }, email: { type: String, default: '' }, type: {type: String, default: ''}, isEmailChecked: { type: Boolean, default: true }, });
我为querySchema
3个属性提供了值,假设当持久化query
对象的新实例时,字段的结果将采用默认值:
var query = {}; query.quoteId = "1414775421426"; query.email = "myself@somewhere.com"; query.type = "Foo";
但是下面的文档是我在集合中看到的结果:
{ "_id" : ObjectId("5453c27d0e4c3f2837071856"), "email" : "myself@somewhere.com", "type" : "Foo", "quoteId" : "1414775421426", "__v" : 0 }
当一个新的query
对象实例被保存到MongoDB数据库时,是否应该将isEmailChecked
和zipcode
分配给它们的默认值?
以下是我如何使用ExpressJS / NodeJS持久查询对象的一个实例:
app.post('/api/queries', function (req, res) { QuoteQuery.create({ quoteId: req.body.query.quoteId, type: req.body.query.type, zipcode: req.body.query.zipcode, email: req.body.query.email, isEmailChecked: req.body.query.isEmailChecked, }, function (err, query) { if (err) { res.send(err); } res.json(query); }); });
有人能帮我理解,为什么我在MongoDB数据库的结果文档中得到了isEmailChecked
和zipcode
属性?
我正在使用NodeJS,AngularJS和ExpressJS以及MongoDB。
当您设置mongoose模型领域它不使用默认值。
作为解决方法,您可以使用下划线来扩展mongoose模型对象与您的query
对象中存在的键如下所示:
_.extend(dbQueryObject, query);
这里是完整的例子:
var mongoose = require('mongoose'); var querySchema = mongoose.Schema({ quoteId: { type: String, default: '' }, zipcode: { type: String, default: '' }, email: { type: String, default: '' }, type: {type: String, default: ''}, isEmailChecked: { type: Boolean, default: true } }); var db = mongoose.createConnection('mongodb://localhost:27017/stackoverflow', { server: { auto_reconnect: true } }, function(err) { var QuerySchema = db.model('test', querySchema); var query = {}; query.quoteId = "1414775421426"; query.email = "myself@somewhere.com"; query.type = "Foo"; QuerySchema.create({ quoteId: query.quoteId, type: query.type, zipcode: query.zipcode, email: query.email, isEmailChecked: query.isEmailChecked }, function (err, query) { process.exit(0); }); });
这是什么在DB:
{ "_id" : ObjectId("5453ce3c9f7e0d13c52abf61"), "type" : "Foo", "email" : "myself@somewhere.com", "quoteId" : "1414775421426", "__v" : 0 }