Nodejs UUIDv4在Mongoose中使用时产生常量id值

bttbmeg0  于 2023-03-30  发布在  Go
关注(0)|答案(2)|浏览(201)

最近我注意到我的UUIDv4生成器有很高的冲突率。我用它来为我的mongodb对象生成UUID,如下所示:

const mongoose = require('mongoose');
const uuid = require('uuid/v4');

const { Schema } = mongoose;

const ObjectSchema = new Schema({
  UUID: { type: String, required: true, default: uuid() },
  ...})

预期输出

[
  {
    UUID: '079f67e1-4532-49fc-b7e6-2e6970c8702f',
    _id: 5e0aa675f900cb561bf51fac,

  },
  {
    UUID: 'afbc0fd4-99aa-4d73-88d7-a4724fb3df30',
    _id: 5e0aa675f900cb561bf51fad,

  },
  {
    UUID: '39b099b5-9eaf-4ac3-8d4b-1380369090b5',
    _id: 5e0aa675f900cb561bf51fae,

  }
]

实际结果

[
      {
        UUID: '39b099b5-9eaf-4ac3-8d4b-1380369090b5',
        _id: 5e0aa675f900cb561bf51fac,

      },
      {
        UUID: '39b099b5-9eaf-4ac3-8d4b-1380369090b5',
        _id: 5e0aa675f900cb561bf51fad,

      },
      {
        UUID: '39b099b5-9eaf-4ac3-8d4b-1380369090b5',
        _id: 5e0aa675f900cb561bf51fae,

      }
    ]

我最近注意到的是,它经常给出一个常量值。通常,当我重新启动服务器时,会分配一个新值。其他人也有这个问题吗?

bvjxkvbb

bvjxkvbb1#

您的代码的问题是UUID将生成一次,并且它将使用相同的默认值。
你需要像这样使用default的函数形式来每次生成一个不同的uuid:

UUID: { type: String, required: true, default: () => uuid() }
qncylg1j

qncylg1j2#

我被赋予了这样的东西,它对我很有效。

_id: {
    type: String,
    default: () => uuidv4(), //Modify this as a function
    required: true,
  },
  foodName: {
    type: String,
    required: true,
  },
  daysSinceAt: {
    type: Number,
    required: true,
  },
});```

相关问题