我有一个名为Test
的Sequelize模型,它有一个唯一的字段value
(主键)。我使用SQLite作为数据库管理系统。
当我使用bulkCreate()
选项ignoreDuplicates: true
时,如果新数据已经存在于数据库中,则bulkCreate
将忽略它。这是可行的,但是bulkCreate()
返回的对象总是具有isNewRecord: false
,即使在数据库中插入新记录时也是如此。
代码
const items = [ {value: 'a'}, {value: 'b'} ]; // Items to be saved in database.
const results = await Test.bulkCreate(items, {
ignoreDuplicates: true // Ignore duplicate records
});
在空数据库上第一次执行bulkCreate()
后,results
的值:
[
Test {
dataValues: {
value: 'a',
createdAt: 2020-07-12T12:01:08.695Z,
updatedAt: 2020-07-12T12:01:08.695Z
},
_previousDataValues: {
value: 'a',
createdAt: 2020-07-12T12:01:08.695Z,
updatedAt: 2020-07-12T12:01:08.695Z
},
_changed: Set {},
_options: {
isNewRecord: true,
_schema: null,
_schemaDelimiter: '',
include: undefined
},
isNewRecord: false
},
Test {
dataValues: {
value: 'b',
createdAt: 2020-07-12T12:01:08.695Z,
updatedAt: 2020-07-12T12:01:08.695Z
},
_previousDataValues: {
value: 'b',
createdAt: 2020-07-12T12:01:08.695Z,
updatedAt: 2020-07-12T12:01:08.695Z
},
_changed: Set {},
_options: {
isNewRecord: true,
_schema: null,
_schemaDelimiter: '',
include: undefined
},
isNewRecord: false
}
]
在第一次执行后,我期望isNewRecord: true
。我错过了什么?
环境
- Windows 10专业版
- NodeJS v12.16.2
- 续作v6.3.3
- SQLite3 v5.0.0
对文档进行序列化
isNewRecord
,共Model
:
bulkCreate()
中的ignoreDuplicates
:
2条答案
按热度按时间ndasle7k1#
您需要访问
_options.isNewRecord
。因为这个issue声明了
isNewRecord
只有在示例还没有持久化到数据库时才被设置为true。在您的例子中,因为您已经保存了示例(第一次还是第二次,这无关紧要,您已经保存了它),所以
isNewRecord
被设置为false。因此,正如我上面提到的,如果你想检查你的示例是否是第一次保存的,请访问
_options.isNewRecord
。7vux5j2d2#
如果数据库中不存在Model示例,则
isNewRecord
字段为true。