我正在开发一个创建永久链接的应用程序。我不确定如何在MondoDB中保存文档。两个策略:
ObjectId自动生成
MongoDB自动生成_id
。我需要在permalink
字段上创建索引,因为我通过永久链接获取信息。此外,我可以使用getTimestamp()
方法访问ObjectId的创建时间,因此datetime
字段似乎是多余的,但如果我删除此字段,我需要两次调用MongoDB来获取信息和另一个采取时间戳。
{
"_id": ObjectId("5210a64f846cb004b5000001"),
"permalink": "ca8W7mc0ZUx43bxTuSGN",
"data": "a lot of stuff",
"datetime": ISODate("2013-08-18T11:47:43.460+-100")
}
生成_id
我使用永久链接生成_id
。
{
"_id": "ca8W7mc0ZUx43bxTuSGN",
"data": "a lot of stuff",
"datetime": ISODate("2013-08-18T11:47:43.460+-100")
}
我认为使用ObjectIds没有任何好处。我错过了什么吗?
答案 0 :(得分:6)
ObjectId
适用于集合中每个文档都没有唯一键的情况。它们是独一无二的,所以你不必担心冲突,它们在大型部署中合理地分页,而不用太担心(它们有利有弊,阅读更多here)。
ObjectId
还包含生成ObjectId
的客户端的时间戳(除非DB服务器配置为生成所有密钥)。有了这些,正如您所注意到的,您可以使用时间戳执行某些日期操作。但是,如果您计划使用聚合框架,则会发现您无法在当前的任何日期操作中使用ObjectId
(issue)。如果你想使用自动对焦,你需要一个包含日期的第二个字段,不幸的是用ObjectId
的内部值加倍存储它。
如果您可以放心,您生成的_id
是唯一的,那么您的数据结构中没有太多理由使用ObjectId
。