- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试在 CSV 导入中使用 findOrCreate
函数来防止使用同一电子邮件地址创建多个用户,但它不起作用。
我将 CSV 文件中的所有行导入到内存中:
importableCsvRows.forEach(row => importData(row))
然后我迭代每一行以导入用户:
function importData (row) {
const name = row[0]
const email = row[1]
addUser(name, email)
}
在 addUser 函数中我使用 findOrCreate:
function addUser (name, email) {
return new Promise(function (resolve, reject) {
const user = models.users.findOrCreate({
where: {email: email},
defaults: { email: email, name: name }
})
.then(u => {
return resolve(u)
})
.catch(err => {
console.log('ERROR', err)
return reject(err)
})
})
}
问题是多个事务开始,因为 findOrCreate 是异步的,所以在第一行完成处理之前,下一行开始。
最佳答案
在 forEach
中,您需要等到数据库事务完成才能开始导入下一个用户。
最简单的方法是 await importData
函数:
async function importData (row) {
const name = row[0]
const email = row[1]
try {
await addUser(name, email)
} catch(err) {
//console.log?
}
}
此外,在addUser
中:不需要返回自己的Promise。只需返回 promise findOrCreate
返回:
function addUser (name, email) {
return models.users.findOrCreate({
where: {email: email},
defaults: { email: email, name: name }
})
})
}
关于javascript - 如何在批量导入中使用sequelize findorcreate?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50942594/
我尝试在 CSV 导入中使用 findOrCreate 函数来防止使用同一电子邮件地址创建多个用户,但它不起作用。 我将 CSV 文件中的所有行导入到内存中: importableCsvRows.fo
坚持使用 Sequelize findOrCreate 方法。 所以我期待得到 tags 的空数组,但我得到 tag.id, tag.name ... 等。 [ { id: 2, name:
因此,在我的express应用程序中,我有一个单独的文件database.js,其中包含用于插入、删除、更新等的所有模型和函数。我还为每个模型都有一个单独的 Controller 。 数据库.js m
我的应用程序正在将套接字相关信息保存到 socketlist 表中。这个想法是,如果带有 socket_id 的条目不存在,则在 postgres 表中创建一个条目。否则什么也不做。这是代码: awa
我在带有 Nodejs + SSD 磁盘 8GB 内存的 Ubuntu 上使用 PostgreSQL 9.6。我从未尝试调整任何数据库的性能,所以我有出厂配置。 我使用 sequelize.js 的
我将 sailsjs 与 mysql 结合使用,并在下订单时使用它保存来自 shopify webhook 的数据。它返回一个 json 对象,其中一个属性是一个客户对象,我将其保存在与主订单表相关的
我发现了一个关于环回的有趣问题。当我使用 findOrCreate 添加记录时,我感到很困惑。让我们看一下示例: for (var x = 0; x < 10; x++) { consol
代码如下: Accounts.findOrCreate({ where: { userName: request.payload.userName }, att
我正在使用 Sequelize 作为 ORM。这是我的用户模型: ### User model ### User = exports.User = globals.sequelize.def
使用 sequelize,我有两个具有关联的模型: var Assessment = sequelize.define("Assessment", { name: DataTypes.STRING
我正在尝试使用 sequelize 和 mysql 在 2 个相关表上插入多行。 基于 sequelize transaction cannot insert because of foreign k
我正在尝试使用 Passport 在 Node.js 中实现社交身份验证,因此我需要在配置 Facebook 身份验证策略时使用 findOrCreate()。 这是我的 facebook.js 配置
为简单起见,我将其简化。我需要根据字符串值(不能是主键/ID)来查找或创建行。它必须在一个循环中完成,所以它必须是异步的。其中一个值也可能已经存在于我们的表中。 假设我有一个这样的数组: const
我正在使用sequelize 6。当我运行findOrCreate().spread时它说“findOrCreate(...).spread 不是一个函数”。这是我的代码: const respons
我想创建一个锦标赛(如果不存在)和一个与锦标赛关联的匹配(如果不存在)。 let [match, created] = await Match.findOrCreate( { where: {sc
我正在将我的 Rails 应用程序的 JSON API 迁移到 Node.js。我正在使用 Sequelize作为 ORM 访问我的 postgres 数据库中的数据。 但是,当我尝试使用 findO
我正在将 Sequelize 与 NodeJS 和 MySql 一起使用。 (最新版本) 我有一个用户模型 - 'id' 以及唯一键和主键。 “id”设置为自动递增。 一些用户详细信息,例如名字、姓氏
我正在尝试在 sequelize 中使用 findorcreate 方法,它在我的 mysql 数据库中正确地插入了一行,但是我在默认部分中输入的值没有被插入。 这是我的代码 return userD
FindOrCreate 假定根据您提供的参数查找或创建。 所以我想知道为什么当找到data(用户)时它会回退到catch promise ,而它应该只返回data 是在 .spread 函数中找到的
我想创建一个某种类型的对象池,比方说Person,实现如下: class Person(val name: String, val email: String) { val data = expe
我是一名优秀的程序员,十分优秀!