Mongoose:当要保存的文档中不存在时,在必填字段中设置默认值
Posted
技术标签:
【中文标题】Mongoose:当要保存的文档中不存在时,在必填字段中设置默认值【英文标题】:Mongoose: Set default value in a required field when this is not present in the document to save 【发布时间】:2017-07-11 11:52:40 【问题描述】:我尝试在空白字段中设置默认值,以便将文档保存在 MongoDB 中
就我而言,这是猫鼬模式
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
我得到错误验证,并且文档没有保存它。
【问题讨论】:
更新时尽量不要提供这些密钥。不要将它们设置为 wmpty 字符串。 【参考方案1】:您需要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
【讨论】:
new
选项不是 Mongoose update()
操作的有效选项,因此不需要。将 upsert
选项设置为 true
足以保证 Mongoose 将创建一个新文档(如果尚不存在)。以上是关于Mongoose:当要保存的文档中不存在时,在必填字段中设置默认值的主要内容,如果未能解决你的问题,请参考以下文章
Mongodb 文档中不存在的字段出现在 mongoose findById() 结果中
Mongoose findOneAndUpdate() 仅在文档已存在时更新,如果不存在则不创建新文档?