isNewRecord 始终为 false

ces*_*pon 5 sqlite node.js sequelize.js

Test我有一个带有唯一字段(主键)的 Sequelize 模型value。我使用 SQLite 作为数据库管理系统。

当我使用该bulkCreate()选项时ignoreDuplicates: truebulkCreate如果新数据已存在于数据库中,则忽略新数据。这是可行的,但返回的对象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
});
Run Code Online (Sandbox Code Playgroud)

首次在空数据库上执行后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
  }
]
Run Code Online (Sandbox Code Playgroud)

我预计isNewRecord: true在第一次执行后。我缺少什么?

环境

  • Windows 10 专业版
  • NodeJS v12.16.2
  • 续集 v6.3.3
  • SQLite3 v5.0.0

续集文档

isNewRecordModel

在此输入图像描述

ignoreDuplicatesbulkCreate()

在此输入图像描述

小智 6

您需要访问_options.isNewRecord.

由于此问题指出,isNewRecord只有在实例尚未持久化到数据库时才将其设置为 true。

在你的情况下,因为你已经保存了实例(第一次或第二次,没关系,你已经保存了)所以isNewRecord设置为 false。

正如我上面提到的,如果您想检查您的实例是否刚刚第一次保存,请访问_options.isNewRecord.


Bhu*_*ore 3

isNewRecord如果数据库中不存在模型实例,则该字段为 true。

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