当前位置:  开发笔记 > 编程语言 > 正文

为什么我们在MongoDB中需要created_at

如何解决《为什么我们在MongoDB中需要created_at》经验,为你挑选了2个好方法。

为什么我们在created_at字段的时候timestamp可以在字段的前4个字节中找到ObjectId

ObjectId("5349b4ddd2781d08c09890f4").getTimestamp()

取自MongoDB文档



1> Timur..:

在某些情况下,这样做是有意义的:

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

    当您完全不使用ObjectId时-通常认为应该使用填充_id字段,而实际上大多数驱动程序仅使用默认值,而MongoDB本身并没有强加它 -相反,它是鼓励使用文档中存在的任何“自然”唯一ID。在这种情况下,如果需要,您将必须自己存储“创建时间戳记”。ObjectIdObjectId

    可用性-如果您依赖此字段及其中的数据,则至少从设计的角度出发,最好对其进行明确化。不过,这更多是一个品味问题。但是,如注释中所述,如果您还想按“创建时间戳记”进行过滤或排序-为它准备一个专用字段并$gt直接在其上使用查询运算符(如)会更容易。



2> Idos..:

如您所说,就像文档中明确指出的那样:

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

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

为客户(美国)提供这样的服务也很方便,因为这使我们尝试获取创建日期并对其执行操作更加直观和容易。


但是请注意,某些框架以不同的方式生成ObjectId。例如:Meteor指出:“由于Meteor当前完全完全随机地构造它们,因此Meteor创建的ObjectID值将无法对其getTimestamp方法获得有意义的答案。” http://docs.meteor.com/api/collections.html#Mongo-ObjectID
推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有