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

Art*_*ero 2 database-design permalinks identifier mongodb

我正在开发一个创建永久链接的应用程序.我不确定如何在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")
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 生成_id

    _id用永久链接生成了.

    {
      "_id": "ca8W7mc0ZUx43bxTuSGN",
      "data": "a lot of stuff",
      "datetime": ISODate("2013-08-18T11:47:43.460+-100")
    }
    
    Run Code Online (Sandbox Code Playgroud)

我没有看到使用ObjectIds的任何好处.我错过了什么吗?

Wir*_*rie 6

ObjectIds适用于集合中每个文档都没有唯一键的情况.它们是独一无二的,因此您不必担心冲突,它们在大型部署中合理地分页,而不必过于担心(它们有利有弊,请在此处阅读更多内容).

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

如果您可以确信_id您生成的是唯一的,那么ObjectId在您的数据结构中使用a的理由就不多了.