有 2 个带有对象的数组,例如:
const a = [
{
title: '1',
catalog: '1',
},
{
title: '2',
catalog: '2',
},
{
title: '3',
catalog: '3',
},
];
const b = [
{
title: '1',
catalog: '1',
},
{
title: '2',
catalog: '2',
},
{
title: '2',
catalog: '3',
},
{
title: '3',
catalog: '2',
},
];
数组a是数据库中的数据=> mongodb
数组b是我发送到数据库的数据=> mongodb
我的任务是将数据库中的数据与我发送的文件中的数据进行比较,并使用数据库中没有的数据创建一个唯一的数组。
有一个现成的解决方案:
const filterData = (array) => {
return array.filter((item1) => {
const duplicate = a.find((item2) => {
// console.log(item1.title);
return item1.title === item2.title && item1.catalog === item2.catalog;
});
return !duplicate;
});
};
const filtered = filterData(b);
await this.movieModel.insertMany(filtered);
但它非常慢,我的数据库中有 100k 个对象,我加载了另外 100k 个对象,因此每个对象都会与另一个对象进行检查。
如何使该过程尽可能快,以便创建唯一的对象数组并立即批量发送数据到 mongodb?
我找到了一个更快的解决方案,当我向数据库添加 100k 对象时,检查下一个对象是否有重复项需要 26 秒,时间随着新对象的添加而增加,但如果我们检查 100-200 个对象中的 20k 对象数据库中有-300k个对象,时间为±3秒。
如果有人可以建议更快的方法,我将很乐意考虑!
试试这个,也许会有帮助。虽然我是编程新手。