MongoDB是否不为嵌套模式添加默认日期?
我正在尝试将表单结果添加到集合中的现有客户端,并且已成功添加所有传递的表单数据变量,但是,尽管存在于架构中,也不会创建和保存默认日期变量。
这里是架构:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
// Create Schema
const FormSchema = new Schema({
formID: {
type: String
},
formName: {
type: String
},
date_completed: {
type: Date,
default: Date.now
},
formData: {
type: JSON
}
});
const ClientSchema = new Schema({
clientID: {
type: String,
required: true,
unique: true
},
dob: {
type: Date,
required: true
},
formResults: {
tags: [
{
type: FormSchema
}
]
}
});
module.exports = Client = mongoose.model('client', ClientSchema);
这是发布表单结果的方法:
router.post('/:id', auth, (req, res) => {
Client.update(
{ clientID: req.params.id },
{
$push: {
formResults: {
$each: [
{
formID: req.body.formID,
formName: req.body.formName,
formData: req.body.formData
}
]
}
}
}
)
.then(() => res.json({ success: true }))
.catch(
err => res.status(404).json({ success: false }) && console.log(err)
);
});
我已经尝试通过将date_completed: Date.now
与其他形式变量一起传递来强制日期,但这没有什么区别。结果仍然保存,没有列出日期变量。我也尝试删除集合并重新创建它,这没有任何变化。并且我检查了集合的索引,对于该索引只有_id和clientID。
这里是执行后保存在数据库中的数据,显示没有date_completed:值。Stored Data
回答如下:乍看之下,您的代码正确无误,因为它符合mongoose
的文档和教程,您可以测试此代码:
// Create Schema
const FormSchema = new Schema({
formID: {
type: String
},
formName: {
type: String
},
date_completed: {
type: Date,
default: function() {
if (!this.date_completed) {
return Date.now();
}
return null;
}
},
formData: {
type: JSON
}
});
或:
var minuteFromNow = function(){
var timeObject = new Date();
return timeObject;
};
// Create Schema
const FormSchema = new Schema({
formID: {
type: String
},
formName: {
type: String
},
date_completed: {
type: Date,
default: minuteFromNow
},
formData: {
type: JSON
}
});
让我们也说这个null是Date属性的有效值,除非您指定为必填。仅在未定义值的情况下才设置默认值,而在其值不正确的情况下才设置默认值。