我正在尝试将表单结果添加到集合中的现有客户端,并且传递的所有表单数据变量均已成功添加,但是,尽管位于架构中,但并未创建和保存默认日期变量。
这是架构:
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 属性的有效值,除非您指定必需。仅当值未定义时才会设置默认值,如果值是假则不会设置。
关于node.js - MongoDB 没有为嵌套模式添加默认日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58369807/