我使用mongoose在mongodb中存储对象,我使用Date.now()
记录createdAt日期我发现的是错误的时间存储在数据库中。差异非常零星,已经过了7天,3天甚至5分钟。
就在今天早上我在澳大利亚东部标准时间上午8点(格林威治标准时间+10)创建了一个物体,但数据库中的时间早于7天。
这是数据库对象:
{
"_id": "554bdfaf797cb8e02753e06f",
"description": "test d",
"createdBy": "testuser",
"key": "f1a593f4dd51e632388a1755e09a7b4dc0bc0e24ef8bcf5cf859ac759a45e8a6",
"__v": 0,
"files": [],
"createdAt": "2015-05-01T05:42:07.687Z"
}
我在mac和win 7上都看到了这个问题。
首先注意到mongodb 2.6.3版,刚升级到3.0.2,没有变化。
更新
我在架构中设置createdAt日期,如下所示:
var uploadSchema = new Schema({
createdAt: {
type: Date,
required: true,
default: Date.now()
},
我的数据库和应用程序在同一台主机上运行。
这里要点 - https://gist.github.com/reecefenwick/1bcff85d18406b33e5cf
答案 0 :(得分:5)
在定义架构以设置Date.now()
的默认值时,您正在调用 createdAt
,以及然后,该值将用于默认值,直到下次重新启动应用程序为止。
相反,您希望将默认值设置为Date.now
函数本身,以便每次创建新文档时都会调用它:
var uploadSchema = new Schema({
createdAt: {
type: Date,
required: true,
default: Date.now
},
答案 1 :(得分:0)
如果您将对象ID粘贴到此处的网站:
http://steveridout.github.io/mongo-object-time/
您将看到此特定文档是今天创建的(2015-05-07T21:57:03.000Z
)。对象id包含创建日期信息。
您在哪里创建createdAt
条目的代码?数据库和应用程序代码是否在不同的服务器上?这可以解释为什么mongo使用与createdAt
不同的日期创建对象ID。
如果它们位于同一台服务器上,则应发布创建createAt
时间字符串的代码。