首页 > 解决方案 > 如何确保随机创建一个独特的标识符?

问题描述

我正在使用随机 npm 将 id 存储到 mongoDB,因为 mongo 只会创建一个不能用于发票编号的长 objectID。我现在的模型是:

orders: [
  {
    orderReference: { type: String },
    orderStatus: { type: String },
    orderType: { type: String },
    orderDate: { type: Date, default: Date.now },
    itemDetails: { type: String },
    purchaseOrder: {
      orderReference: { type: String },
      orderStatus: { type: String },
      orderType: { type: String },
      orderDate: { type: Date, default: Date.now },
      itemDetails: { type: String },
    },
    thirdPartyOrder: {
      orderReference: { type: String },
      orderType: { type: String },
      orderDate: { type: Date },
      itemDetails: { type: String },
    },
    platformRevenue: {
      orderReference: { type: String },
      orderType: { type: String },
      orderDate: { type: Date, default: Date.now },
      itemDetails: { type: String }
    }
  }
],

在当前模型中,我如何检查/查询当前在其他订单中的 ID 不是重复的并且实际上是唯一的。因为 randomatic 本身不会创建唯一的 ID。它只是创建一个随机 ID,而在我的用例中,我想要一个唯一的 4 位数字 ID 用于 orderReference。

是否有可能四位数的随机唯一 ID 会在一天内完成,我宁愿创建顺序 ID 而不是增量为 +1?

为 orderReference 创建 ID 的行业标准是什么。在我一生中收到的所有发票上,我大多看到 4 到 6 位数字 ID。

请帮助并建议最好的用例。

标签: javascriptdatabasemongodb

解决方案


我宁愿使用您的第二个建议,即带增量的顺序 ID。

虽然可以使用随机数,但您可能会在插入之前检查特定 ID 是否已在数据库中,在这种情况下,您必须生成新 ID。

更重要的是,使用顺序版本,您将能够(近似)跟踪发票/发票数量。

无论哪种方式,限制都是 10.000 个不同的 ID(包括 0 个)。

希望能帮助到你!


推荐阅读