Mongoose:在要保存的文档中不存在时,在必填字段中设置默认值

use*_*933 6 mongoose mongodb node.js

我试图在空字段中设置一个默认值,以便将文档保存在MongoDB中

在我的例子中,这是mongoose模式

var Distribution = new Schema({
    temporalCoverage: {
        startDate: {type: Date, default: Date.now},
        endDate: {type: Date, default: Date.now}
    },
    distributionText: String
});
Run Code Online (Sandbox Code Playgroud)

这是要保存的文件:

"distribution": {
    "temporalCoverage": {
      "endDate": "",
      "startDate": ""
    },
    "distributionText": "test"
  }
Run Code Online (Sandbox Code Playgroud)

在本文档中,空字段为endDate和startDate.该文档以空值保存在mongoDB中.

"distribution": {
    "temporalCoverage": {
      "endDate": null,
      "startDate": null
    },
    "distributionText": "test"
  }
Run Code Online (Sandbox Code Playgroud)

我想保存默认值,而不是null

如果在模式中放置所需的字段,temporalCoverage : { startDate : { type: Date, required: true, default: Date.now }, endDate : { type: Date, required: true, default: Date.now } }我会得到错误验证,并且文档没有保存.

Max*_*s.c 9

你需要这个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 = {
  // 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');
  });
Run Code Online (Sandbox Code Playgroud)

请参阅http://mongoosejs.com/docs/defaults.html