【发布时间】:2016-07-11 20:19:23
【问题描述】:
在我的 node.js 脚本中创建一个新的 ObjectId 时使用:
mongojs.ObjectId()
我得到一个类似的_id
“f5818257dd0b55ce321f87b5”
当我使用时:
mongojs.ObjectId(“f5818257dd0b55ce321f87b5”).getTimestamp()
我明白了:
“Sun Jul 10 2016 19:12:21 GMT+0200 (CEST)"
但是当我在 MongoDB Shell 中使用 ObjectId("f5818257dd0b55ce321f87b5").getTimestamp() 时,我得到:
ISODate("2100-07-10T12:23:51Z")
当我想通过_id 对我的文档进行排序时:
db.stores.find().sort({_id: -1})
由于ObjectId 中的时间戳错误,文档以错误的顺序返回。
如何让 mongojs 以正确的格式生成 ObjectIds?
我真的很困惑,谁能帮帮我?
编辑: 当我使用 mongojs 插入文档时,我得到一个 ObjectId,例如:
“30a282576f9f2c4772e69cd9”
当我得到时间戳时:
ObjectId("30a282576f9f2c4772e69cd9").getTimestamp()
返回:
ISODate("1995-11-09T22:36:07Z")
但是当我使用 MongoDB Shell 插入文档时,我得到一个 ObjectId,例如:
“5782a4809f3c4cbed9f2a8a1”
当我从这个 id 获取时间戳时:
ObjectId("5782a4809f3c4cbed9f2a8a1").getTimestamp()
我明白了:
ISODate("2016-07-10T19:39:44Z")
这两个文档相隔 5 分钟创建。 为什么用mongojs插入的ObjectId中的日期是错误的?
【问题讨论】:
-
您使用的是什么版本的 MongoDB Node.js 驱动程序?我可以使用 2.2.0 节点驱动程序(并引发 jira.mongodb.org/browse/NODE-749)重现这种不正确的行为,但 2.1.21 和旧版本似乎还不错。
-
谢谢,我确实在使用 mongodb 2.2.0,我更新到 2.2.1,现在它可以正常工作了。