我正在使用cron作业通过以下功能在数据库调用中导入多个项目:
async function importItems(items){
return item_schema.insertMany(items, {ordered: false})
.then(docs => {
const n = docs ? docs.length : 0
docs.map((item) => {
/* Do something */
})
return `New items imported ${n} / ${items.length}`
})
.catch(error(500, `Error importing items.`))
}
由于以前可能会导入一些项目,由于重复的键('item_id')总是触发 catch <,我收到了 BulkWriteError / em>。
我的问题是我需要对在 then 函数的 docs 数组中获得的成功导入的n个新项进行“处理”,而忽略捕获。
有没有办法做到这一点? 谢谢
答案 0 :(得分:1)
function importItems(items) {
return item_schema.find({
item_id: {
$in: items.map((item) => item.item_id) // Check if item_id is one of the array values
}
})
.then((documents) => {
// documents is all the items that already exists
const newItems = items.filter((item) => !documents.find((doc) => doc.item_id === item.item_id));
return item_schema.insertMany(newItems, { ordered: false })
.then((docs) => {
const n = docs ? docs.length : 0
docs.map((item) => {
/* Do something */
})
return `New items imported ${n} / ${items.length}`
})
.catch(error(500, `Error importing items.`));
})
.catch(error(500, `Error importing items.`));
}