在MongoDB中生成_id与ObjectId自动生成

时间:2013-08-18 12:21:01

标签: mongodb database-design permalinks identifier

我正在开发一个创建永久链接的应用程序。我不确定如何在MondoDB中保存文档。两个策略:

  1. 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")
    }
    
  2. 生成_id

    我使用永久链接生成_id

    {
      "_id": "ca8W7mc0ZUx43bxTuSGN",
      "data": "a lot of stuff",
      "datetime": ISODate("2013-08-18T11:47:43.460+-100")
    }
    
  3. 我认为使用ObjectIds没有任何好处。我错过了什么吗?

1 个答案:

答案 0 :(得分:6)

ObjectId适用于集合中每个文档都没有唯一键的情况。它们是独一无二的,所以你不必担心冲突,它们在大型部署中合理地分页,而不用太担心(它们有利有弊,阅读更多here)。

ObjectId还包含生成ObjectId的客户端的时间戳(除非DB服务器配置为生成所有密钥)。有了这些,正如您所注意到的,您可以使用时间戳执行某些日期操作。但是,如果您计划使用聚合框架,则会发现您无法在当前的任何日期操作中使用ObjectIdissue)。如果你想使用自动对焦,你需要一个包含日期的第二个字段,不幸的是用ObjectId的内部值加倍存储它。

如果您可以放心,您生成的_id是唯一的,那么您的数据结构中没有太多理由使用ObjectId