如何避免在节点中插入重复记录,sqlite [knex,objectionJS]
how to avoid insert duplicate record in node, sqlite [knex, objectionJS]
我正在从 api 中提取数据并存储到数据库中,这是我从 api 中获取的值:
const optAdThisMonthsResult = [
[ 'google.com', 'Display', '2021-02-01', 3, 48, 76 ],
[ 'google.com', 'a1.php', '2021-02-01', 94, 31, 42 ],
]
获取后我将其存储在我的数据库中:
for (const data of optAdThisMonthsResult) {
//1. Assign values to store
let rowData = {
url: data[0],
tags: data[1],
date: data[2],
value1: data[3],
value2:data[4],
value3: data[5],
};
//2. Store to database
let ret = await OptAd.query().insert(rowData);
console.log(
`Inserted OptAd data with return code: ${require("util").inspect(ret)}`
);
}
每次我 运行 这个脚本它也会存储数据库中已经存在的重复值,如果数据已经存在,我如何为此构建测试不要插入,只更新这个value1
value2
value3
首先尝试使用 Knex 进行更新,如果 returns 更新了零行,请尝试插入
for (const data of optAdThisMonthsResult) {
//1. Assign values to store
let rowData = {
url: data[0],
tags: data[1],
date: data[2],
value1: data[3],
value2: data[4],
value3: data[5],
};
// get count first
const result = await OptAd.query()
.count("tags as count")
.where({ url: data[0], taga: data[1], date: data[2] })
.first();
try {
if (result.count === 0) {
// row not present insert data
let ret = await OptAd.query().insert(rowData);
console.log(
`Inserted OptAd data with return code: ${require("util").inspect(ret)}`
);
} else {
// row already presnt do update
// checking if its not updated
const { count } = await OptAd.query()
.count("tags as count")
.where(rowData)
.first();
if (count === 0) {
const updated = await OptAd.query()
.update(rowData)
.where({ url: data[0], taga: data[1], date: data[2] });
console.log("updated");
} else {
console.log("Not Changed");
}
}
} catch (error) {
console.log(error.message);
}
}
我正在从 api 中提取数据并存储到数据库中,这是我从 api 中获取的值:
const optAdThisMonthsResult = [
[ 'google.com', 'Display', '2021-02-01', 3, 48, 76 ],
[ 'google.com', 'a1.php', '2021-02-01', 94, 31, 42 ],
]
获取后我将其存储在我的数据库中:
for (const data of optAdThisMonthsResult) {
//1. Assign values to store
let rowData = {
url: data[0],
tags: data[1],
date: data[2],
value1: data[3],
value2:data[4],
value3: data[5],
};
//2. Store to database
let ret = await OptAd.query().insert(rowData);
console.log(
`Inserted OptAd data with return code: ${require("util").inspect(ret)}`
);
}
每次我 运行 这个脚本它也会存储数据库中已经存在的重复值,如果数据已经存在,我如何为此构建测试不要插入,只更新这个value1
value2
value3
首先尝试使用 Knex 进行更新,如果 returns 更新了零行,请尝试插入
for (const data of optAdThisMonthsResult) {
//1. Assign values to store
let rowData = {
url: data[0],
tags: data[1],
date: data[2],
value1: data[3],
value2: data[4],
value3: data[5],
};
// get count first
const result = await OptAd.query()
.count("tags as count")
.where({ url: data[0], taga: data[1], date: data[2] })
.first();
try {
if (result.count === 0) {
// row not present insert data
let ret = await OptAd.query().insert(rowData);
console.log(
`Inserted OptAd data with return code: ${require("util").inspect(ret)}`
);
} else {
// row already presnt do update
// checking if its not updated
const { count } = await OptAd.query()
.count("tags as count")
.where(rowData)
.first();
if (count === 0) {
const updated = await OptAd.query()
.update(rowData)
.where({ url: data[0], taga: data[1], date: data[2] });
console.log("updated");
} else {
console.log("Not Changed");
}
}
} catch (error) {
console.log(error.message);
}
}