javascript - 为什么这个 MongoDB 文档是用相同的 nanoid 生成的?
问题描述
首先,我已经找到了一个修复方法,但我需要知道为什么会出现这个错误。在以下两个 MongoDB 示例中,文档分别使用相同的 id 和 date 生成。
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 中的值与引用有关,但我无法准确指出它发生的原因。
解决方案
当您在对象中传递 this 时:
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,
},
推荐阅读
- node.js - AngularJS,来自 Json 通过服务器的特殊字符
- python - 在python的for循环中将json转换为数据框
- python - Pytorch memory leak when threading
- python - Function not applying to pandas dataframe properly
- java - why do we need to specify paint while drawing bitmaps in custom view (android studio)
- python - Store split value into separate list python
- r - Opening the terminal in R
- amazon-web-services - AWS Services and Regions
- artifactory - Deploy Artifact Bundle to JFrog Artifactory with REST-API
- html - Disable password suggestions of Chrome and Firefox