Nodejs UUIDv4 在 Mongoose 中使用时产生常量 id 值
Nodejs UUIDv4 producing constant id value when used in Mongoose
最近我注意到我的 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,
}
]
我最近注意到的是,它经常给出一个常数值。通常,当我重新启动服务器时会分配一个新值。还有谁有相同的问题吗?
您的代码的问题是 UUID 将生成一次,并且将使用相同的默认值。
需要像这样使用default的函数形式每次生成不同的uuid:
UUID: { type: String, required: true, default: () => uuid() }
最近我注意到我的 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,
}
]
我最近注意到的是,它经常给出一个常数值。通常,当我重新启动服务器时会分配一个新值。还有谁有相同的问题吗?
您的代码的问题是 UUID 将生成一次,并且将使用相同的默认值。
需要像这样使用default的函数形式每次生成不同的uuid:
UUID: { type: String, required: true, default: () => uuid() }