答案 0 :(得分:5)
正如你所说的那样,在documentation中明确指出:
由于_id ObjectId默认存储4字节时间戳,因此大多数情况下不需要来存储任何文档的创建时间。
您可以使用ObjectId("5349b4ddd2781d08c09890f4").getTimestamp()
以ISO日期格式获取创建日期。
客户(我们)也可以方便地获得这样的服务,因为这样我们可以更直观,更轻松地尝试创建日期和执行操作。
答案 1 :(得分:5)
有几种情况可以这样做:
当您需要更高的精度时 - ObjectId.getTimestamp()
精确到秒,而Date
字段存储毫秒。在mongo
shell中进行比较:new Date()
产生ISODate("2016-01-03T21:21:38.032Z")
,而ObjectId().getTimestamp()
产生ISODate("2016-01-03T21:21:50Z")
。
当您完全不使用ObjectId
时,通常认为_id
字段应填充ObjectId
,事实上,ObjectId
只是大多数司机和MongoDB itself doesn't impose it使用的默认值 - 相反,如果文件存在,则鼓励使用任何“自然”唯一ID。在这种情况下,如果需要,您必须自己存储“创建时间戳”。
可用性 - 如果您依赖于此字段及其中的数据,至少从设计的角度来看,可能更好地明确它。这更像是一种品味问题。但是,正如评论中所述,如果您还希望按“创建时间戳”进行过滤或排序 - 可以更容易为其创建专用字段并使用查询运算符(例如$gt
),例如,直接在其上