我应该在“ _id”中使用时间戳吗?

Het*_*Joe 5 timestamp mongodb

我需要监视记录的创建时间,以便进一步查询和修改。

我想到的第一件事是为文档提供一个“ createDateTime”字段,默认值为“ new Date()”,但是Mongodb说文档_id嵌入了时间戳,并且id是在创建文档时生成的,因此为该字段添加新字段听起来很虚构。

很多次,我已经看到人们为他们的数据设置一个“ createDateTime”,但我不知道他们是否知道mongodb的_id的详细信息。

我想知道应该将_id用作“ createDateTime”字段吗?最佳做法是什么?以及利弊。

感谢您的任何提示。

Wir*_*rie 6

实际上我想说这取决于您想如何使用日期。

例如,使用聚合框架日期运算符无法操作。

将失败,例如:

db.test.aggregate( { $group : { _id:  { $year: "$_id" } } })
Run Code Online (Sandbox Code Playgroud)

出现以下错误:

"errmsg" : "exception: can't convert from BSON type OID to Date"
Run Code Online (Sandbox Code Playgroud)

(无法从 中提取日期ObjectId。)

因此,如果您想在聚合中进行任何类型的日期数学运算,通常是简单日期运算的操作就会变得更加复杂。如果有邮票就容易多了createDateTime。使用不同字段的聚合来计算在特定年份和月份创建的文档数量会很简单createdDateTime

ObjectId在某种程度上,您可以对 进行排序。其余8 个字节无法ObjectId以有意义的方式排序。大多数 MongoDB 驱动程序默认在驱动程序中而不是在数据库中创建 ObjectId。因此,如果您有多个客户端(例如 Web 服务器)创建新文档(和新ObjectId文档),则时间戳只会与各个服务器一样准确。

此外,根据您需要的精度,ISODate使用 8 个字节存储值,而不是ObjectId.