我在csv文件中有9577个独特的记录。为什么我的代码使用insertMany()会跳过一些记录并多次插入相同的记录?
此代码插入9800条记录并且不是插入所有记录,而是插入其中一些记录。任何想法,为什么它不插入独特的9577记录,也有一些它们的重复?下面我还插入保持代码的一部分,所以你得到的全貌
function bulkImportToMongo(arrayToImport, mongooseModel) {
const Model = require(`../../../models/${mongooseModel}`);
let batchCount = Math.ceil(arrayToImport.length/100);
console.log(arrayToImport.length);
let ops = [];
for (let i = 0; i < batchCount; i++) {
// console.log(i);
let batch = arrayToImport.slice(i, i + 100);
console.log(batch.length);
ops.push(Model.insertMany(batch));
}
return ops;
return Promise.all(ops).then(results => {
// results is an array of results for each batch
console.log("results: ", results);
});
}
我解析csv文件
const Promise = require("bluebird");
const csv = require("fast-csv");
const path = require("path");
const fs = Promise.promisifyAll(require("fs"));
const promiseCSV = Promise.method((filePath, options) => {
return new Promise((resolve, reject) => {
var records = [];
csv
.fromPath(filePath, options)
.on("data", record => {
records.push(record);
})
.on("end",() => {
// console.log(records);
resolve(records);
});
});
});
这里是连接结合在一起的脚本:
const path = require("path");
const promiseCSV = require("./helpers/ImportCSVFiles");
const {
connectToMongo,
bulkImportToMongo
} = require("./helpers/mongoOperations");
const filePath = path.join(__dirname, "../../data/parts.csv");
const options = {
delimiter: ";",
noheader: true,
headers: [
"facility",
"partNumber",
"partName",
"partDescription",
"netWeight",
"customsTariff"
]
};
connectToMongo("autoMDM");
promiseCSV(filePath, options).then(records => {
bulkImportToMongo(records, "parts.js");
});
没有它并没有解决问题... batchCount是多少批全阵列式已被划分在...我减少csv文件数量OS项目30和下降批量限制为5.它生成了6个batchCount。我还做了一个console.log的arrayToImport,它的长度是30以及所有的唯一对象。但是,当我在那里检查了约有9个不同的项目已经复制了几次的mongodb,但文档的总数仍然是30 ... –