J'ai 9577 enregistrements uniques dans un fichier csv.Pourquoi mon code utilisant insertMany() ignore certains enregistrements et insère plusieurs fois les mêmes enregistrements?
Ce code insère 9800 enregistrements et insère pas tous les enregistrements, mais des doublons de certains d'entre eux. Une idée pour laquelle il n'insère pas les enregistrements 9577 uniques et aussi les doublons de certains d'entre eux? Ci-dessous, insérer également continuer à faire partie du code afin que vous obtenez l'image entière
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);
});
}
Je Parse le fichier 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);
});
});
});
Et le script ici qui relie tous ensemble:
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");
});
Non, il ne résout pas le problème ... batchCount est combien de lots tout le tableau a été divisé en ... je baisse les articles os du numéro dans le fichier csv à 30 et diminution le batchlimit à 5. Il a généré 6 batchCount's. J'ai également fait un console.log de arrayToImport et il y avait une longueur de 30 et tous les objets uniques. Mais quand j'ai vérifié dans le mongodb là où environ 9 éléments différents qui avaient été dupliqués à quelques reprises, mais le nombre total de documents était encore 30 ... –