【问题标题】:MongoDB correct way to auto incrementMongoDB自动递增的正确方法
【发布时间】:2015-02-18 00:08:12
【问题描述】:

我有一个数据库结构,其文档使用外键相互引用。尽管 MongoDB 在 JOIN 查询方面做得不是很好,但我们可以通过基于外键运行单独的查询来获取文档。

我可以使用唯一的 MongoDB 的 ObjectID (_id)。但它太长了,而且在客户端显示这个长 id 来查询数据看起来有点难看。我想在 MongoDB 中创建自定义自动增量来解决这个问题,但 MongoDB 文档说:

通常在 MongoDB 中,您不会对 _id 字段或任何字段使用自动递增模式,因为它不适用于具有大量文档的数据库。

那么我下面的数据结构的最佳解决方案是什么

Collection: Products
{ 
    Project_ID: 1001, <Auto Incrementing>
    Product: "Example Product",
    ..<Few other fields>..
}


Collection: Payments
{ 
    Project_ID: 1001, <Foreign key>
    Pay_ID: 2001,  <Auto Incrementing>
    ..<Few other fields>..
}


Collection: Others
{ 
    Project_ID: 1001, <Foreign key>
    Pay_ID: 2001,  <Foreign key>
    Other_ID: 3001,  <Auto Incrementing>
    ..<Few other fields>..
}

【问题讨论】:

  • 很少向客户显示_id,对吧?您可以随时使用POST 请求隐藏_id
  • Erm,几乎每一种显示技术都允许枚举表格行等。长话短说 OP:没有自动增量。
  • @OP:我感觉您正在尝试做的事情(有意或无意地)是将 MongoDB 用作 RDBMS。 MongoDB 中没有外键的概念,也没有自动增量。如果您尝试使用 MongoDB 来模拟 RDBMS,将​​会发生以下情况:您最终会得到一个过度规范化、性能不佳的系统以及臃肿的代码库。整个发展过程从一开始就不同。在 RDBMS 中,您类似于域模型结构并尝试回答您的问题。在 MongoDB 中,您可以根据想要回答的问题创建模型。

标签: mongodb mongodb-query auto-increment nosql


【解决方案1】:

MongoDB 并不打算像关系数据库那样使用。不支持服务端外键的概念。理想情况下,您必须嵌入子文档。有关更多信息,请参阅此帖子

MongoDB normalization, foreign key and joining

【讨论】:

    猜你喜欢
    • 2022-08-03
    • 2020-05-18
    • 2016-01-23
    • 2016-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    相关资源
    最近更新 更多