首先,我已经找到了一个修复,但我需要知道的是为什么会发生错误。在下面两个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,
},