为什么我们需要MongoDB中的created_at

时间:2016-01-03 08:24:44

标签: mongodb

为什么在created_at的前4个字节中可以找到timestamp的{​​{1}}字段时我们

ObjectId

取自MongoDB Docs

2 个答案:

答案 0 :(得分:5)

正如你所说的那样,在documentation中明确指出:

  

由于_id ObjectId默认存储4字节时间戳,因此大多数情况下不需要来存储任何文档的创建时间。

您可以使用ObjectId("5349b4ddd2781d08c09890f4").getTimestamp()以ISO日期格式获取创建日期。

客户(我们)也可以方便地获得这样的服务,因为这样我们可以更直观,更轻松地尝试创建日期和执行操作。

答案 1 :(得分:5)

有几种情况可以这样做:

  1. 当您需要更高的精度时 - ObjectId.getTimestamp()精确到秒,而Date字段存储毫秒。在mongo shell中进行比较:new Date()产生ISODate("2016-01-03T21:21:38.032Z"),而ObjectId().getTimestamp()产生ISODate("2016-01-03T21:21:50Z")

  2. 当您完全不使用ObjectId时,通常认为_id字段填充ObjectId,事实上,ObjectId只是大多数司机和MongoDB itself doesn't impose it使用的默认值 - 相反,如果文件存在,则鼓励使用任何“自然”唯一ID。在这种情况下,如果需要,您必须自己存储“创建时间戳”。

  3. 可用性 - 如果您依赖于此字段及其中的数据,至少从设计的角度来看,可能更好地明确它。这更像是一种品味问题。但是,正如评论中所述,如果您还希望按“创建时间戳”进行过滤或排序 - 可以更容易为其创建专用字段并使用查询运算符(例如$gt),例如,直接在其上