gpt4 book ai didi

knex.js - Knexjs如果不存在,请插入else更新

转载 作者:行者123 更新时间:2023-12-04 16:43:10 24 4
gpt4 key购买 nike

如何优化此代码?
我不想在哪里打电话2次...可能有比这更好的查询了吗?

    return self.db.clientDevices.where(device).then(function (rows) {
if (rows.length != 1) {
device.key = value;
self.db.clientDevices.insert(device).then();
} else {
self.db.clientDevices.where(device).update(device).then();
}
});

最佳答案

假设您有一个唯一键(在此示例中为post_id)和一个对象数组(blogPosts),则可以使用以下帮助器方法:

function insertOrUpdate(tableName, blogPosts){
return knex.transaction(trx => {
let queries = blogPosts.map(tuple =>
trx.raw(util.format('%s ON CONFLICT (post_id) DO UPDATE SET %s',
trx(tableName).insert(tuple).toString().toString(),
trx(tableName).update(tuple).whereRaw(`'${tableName}'.post_id = '${tuple.post_id}'`).toString().replace(/^update\s.*\sset\s/i, '')
))
.transacting(trx)
);
return Promise.all(queries).then(trx.commit).catch(trx.rollback);
})
}

并这样调用它:

insertOrUpdate('posts', [ 
{ post_id : 1, content: 'Blog Post 1' },
{ post_id : 2, content: 'Blog Post 2' }
]);

关于knex.js - Knexjs如果不存在,请插入else更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33540796/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com