我在使用具有defaultValue的SimpleSchema处理type: Date
时遇到了麻烦。
在mongodb(3.0.1)中,日期条目具有启动流星线程的时间。预期的行为是将服务器上对象的插入日期“约会”。
LIB / schema.js
Schema.DateCol = new SimpleSchema({
date: {
type: Date,
defaultValue: new Date()
},
dateModified: {
type: Date,
autoValue: function () { return new Date(); }
}
});
的客户机/ home.html的
{{> quickForm id="test" schema="Schema.DateCol" collection="DateCol" type="insert" }}
插入两个物体后进入mongo:
对象1
{
"_id": "PuME9jWwJJiw9diSC",
"date": new Date(1432117722634),
"dateModified": new Date(1432117850366)
}
对象2:
{
"_id": "qqHqkN4YapWDsFhxx",
"date": new Date(1432117722634),
"dateModified": new Date(1432117890380)
}
你将使用MongoDB 3.0.1(我在MongoDB 2.4上没有这个错误)将错误包含在存储库Github中: https://github.com/JVercout/meteor-defaultValue-date-errored
有什么想法吗?
答案 0 :(得分:3)
问题是,在运行创建模式的代码时,new Date()
表达式会被计算一次。然后将该值用作defaultValue
。之间没有区别:
var x = new SimpleSchema({
date: {defaultValue: new Date(), ...}
});
和
var defaultDate = new Date();
var x = new SimpleSchema({
date: {defaultValue: defaultDate, ...}
});
您似乎需要autoValue
,因为看起来您可以使用defaultValue
的函数。 Collection2 documentation实际上有一个使用autoValue
用于"在"创建的示例领域。这取决于Collection2添加的字段,但我在你的git repo中看到你正在使用它。
// Force value to be current date (on server) upon insert
// and prevent updates thereafter.
createdAt: {
type: Date,
autoValue: function() {
if (this.isInsert) {
return new Date;
} else if (this.isUpsert) {
return {$setOnInsert: new Date};
} else {
this.unset();
}
}
}