为什么这个MongoDB文档正在生成相同的纳米oid?



首先,我已经找到了一个修复,但我需要知道的是为什么会发生错误。在下面两个MongoDB示例中,文档分别以相同的id和日期生成。

id: {
type: String,
required: true,
unique: true,
default: nanoid(),
immutable: true,
},
dateCreated: {
type: Number,
required: true,
default: Date.now(),
immutable: true,
}

在以下两个示例中,每个文档都使用不同的id和创建日期生成

id: {
type: String,
required: true,
unique: true,
default: () => nanoid(),
immutable: true,
},
dateCreated: {
type: Number,
required: true,
default: () => Date.now(),
immutable: true,
}

我知道这与javascript中的值与引用有关,但我不能准确地指出为什么会发生这种情况。

当你在一个对象中传递这个时:

default: nanoid(),

javascript解释器将首先执行nanoid()并将返回值赋给default字段。

本质上与

相同
const newId = nanoid();
...
id: {
type: String,
required: true,
unique: true,
default: newId
immutable: true,
},

这有效地将默认值设置为静态值。

请注意,如果不包含(),您可能会得到您想要的行为,例如

id: {
type: String,
required: true,
unique: true,
default: nanoid,
immutable: true,
},

最新更新