模式中生命默认值
Your schemas can define default values for certain paths. If you create a new document without that path set, the default will kick in.
var schema = new Schema({
name: String,
role: { type: String, default: 'guitarist' }
});
var Person = db.model('Person', schema);
var axl = new Person({ name: 'Axl Rose', role: 'singer' });
assert.equal(axl.role, 'singer');
var slash = new Person({ name: 'Slash' });
assert.equal(slash.role, 'guitarist');
默认函数
You can also set the default schema option to a function. Mongoose will execute that function and use the return value as the default.
var schema = new Schema({
title: String,
date: {
type: Date,
// `Date.now()` returns the current unix timestamp as a number
default: Date.now
}
});
var BlogPost = db.model('BlogPost', schema);
var post = new BlogPost({ title: '5 Best Arnold Schwarzenegger Movies' });
// The post has a default Date set to now
assert.ok(post.date.getTime() >= Date.now() - 1000);
assert.ok(post.date.getTime() <= Date.now());
setDefaultsOnInsert
选项
By default, mongoose only applies defaults when you create a new document. It will not set defaults if you use update() and findOneAndUpdate(). However, mongoose 4.x lets you opt-in to this behavior using the setDefaultsOnInsert option.
重要
The setDefaultsOnInsert option relies on the MongoDB $setOnInsert operator. The $setOnInsert operator was introduced in MongoDB 2.4. If you're using MongoDB server < 2.4.0, do not use setDefaultsOnInsert.
var schema = new Schema({
title: String,
genre: { type: String, default: 'Action' }
});
var Movie = db.model('Movie', schema);
var query = {};
var update = { title: 'The Terminator' };
var options = {
// Return the document after updates are applied
'new': true,
// Create a document if one isn't found. Required
// for `setDefaultsOnInsert`
upsert: true,
setDefaultsOnInsert: true
};
Movie.
findOneAndUpdate(query, update, options, function(error, doc) {
assert.ifError(error);
assert.equal(doc.title, 'The Terminator');
assert.equal(doc.genre, 'Action');
});