liurenchaxin/scripts/n8n_direct_insert.js

85 lines
2.7 KiB
JavaScript

const items = $input.all();
const results = [];
// 如果没有数据需要插入
if (items.length === 0 || (items.length === 1 && items[0].json.status === 'no_new_data')) {
console.log('没有新数据需要插入');
return items;
}
console.log(`准备插入 ${items.length} 条新文章`);
// 准备批量插入的数据
const documentsToInsert = items.map(item => item.json);
try {
// 批量插入,因为已经确保了唯一性,所以直接插入
const result = await mongoClient.db('taigong').collection('articles').insertMany(
documentsToInsert,
{ ordered: false } // 即使某条失败也继续插入其他的
);
console.log(`✅ 成功插入 ${result.insertedCount} 条文章`);
// 返回插入结果
for (let i = 0; i < documentsToInsert.length; i++) {
const doc = documentsToInsert[i];
const insertedId = result.insertedIds[i];
results.push({
json: {
action: 'inserted',
sequence_id: doc.sequence_id,
article_id: doc.article_id,
title: doc.title,
mongodb_id: insertedId,
status: 'success'
}
});
}
} catch (error) {
console.error('❌ 批量插入失败:', error.message);
// 如果批量插入失败,尝试逐条插入
console.log('尝试逐条插入...');
for (const doc of documentsToInsert) {
try {
const result = await mongoClient.db('taigong').collection('articles').insertOne(doc);
console.log(`✅ 单条插入成功: ${doc.article_id}`);
results.push({
json: {
action: 'inserted',
sequence_id: doc.sequence_id,
article_id: doc.article_id,
title: doc.title,
mongodb_id: result.insertedId,
status: 'success'
}
});
} catch (singleError) {
console.error(`❌ 单条插入失败 ${doc.article_id}:`, singleError.message);
results.push({
json: {
action: 'error',
sequence_id: doc.sequence_id,
article_id: doc.article_id,
title: doc.title,
error: singleError.message,
status: 'failed'
}
});
}
}
}
// 统计结果
const successCount = results.filter(r => r.json.status === 'success').length;
const failCount = results.filter(r => r.json.status === 'failed').length;
console.log(`插入完成: 成功 ${successCount} 条, 失败 ${failCount}`);
return results;