NodeJS isNewRecord始终为false

cbjzeqam  于 2023-06-29  发布在  Node.js
关注(0)|答案(2)|浏览(146)

我有一个名为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

ndasle7k

ndasle7k1#

您需要访问_options.isNewRecord
因为这个issue声明了isNewRecord只有在示例还没有持久化到数据库时才被设置为true。
在您的例子中,因为您已经保存了示例(第一次还是第二次,这无关紧要,您已经保存了它),所以isNewRecord被设置为false。
因此,正如我上面提到的,如果你想检查你的示例是否是第一次保存的,请访问_options.isNewRecord

7vux5j2d

7vux5j2d2#

如果数据库中不存在Model示例,则isNewRecord字段为true。

const user = new User({ ...userData });
console.log(user.isNewRecord); // true
await user.save();
console.log(user.isNewRecord); // false

相关问题