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

ikfrs5lh  于 2023-01-21  发布在  Go
关注(0)|答案(2)|浏览(178)

我尝试在一个空字段中设置一个默认值,以便将文档保存到MongoDB中
在我的例子中,这是 Mongoose 模式

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

这是要保存的文档:

"distribution": {
    "temporalCoverage": {
      "endDate": "",
      "startDate": ""
    },
    "distributionText": "test"
  }

在这个文档中,空字段是endDate和startDate,文档保存在mongoDB中,值为空。

"distribution": {
    "temporalCoverage": {
      "endDate": null,
      "startDate": null
    },
    "distributionText": "test"
  }

我想保存默认值,不能为空
如果将所需字段放入模式temporalCoverage : { startDate : { type: Date, required: true, default: Date.now }, endDate : { type: Date, required: true, default: Date.now } },则会得到错误验证,并且文档不会保存它。

5vf7fwbs

5vf7fwbs1#

您需要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');
  });

参见http://mongoosejs.com/docs/defaults.html

nle07wnf

nle07wnf2#

使用新日期()代替Date.now()

相关问题