Je veux exporter une table sur CSV à partir de MongoDB à l'aide de ce script:
const mongodb = require("mongodb").MongoClient; const fastcsv = require("fast-csv"); const fs = require("fs"); let url = "mongodb://...." mongodb.connect( url, { useNewUrlParser: true, useUnifiedTopology: true }, (err, client) => { if (err) throw err; client .db("mydb") .collection("mycsv") .find({}) .toArray((err, data) => { if (err) throw err; console.log(data); fastcsv .write(data, { headers: true }) .on("finish", function() { console.log("Write to mycsv.csv successfully!"); }) .pipe(fs.createWriteStream("mycsv.csv")); client.close(); }); } );
4 Réponses :
Je pense que le problème peut être que vous ne fournissez aucune information d'en-tête à Fast-CSV. Dans les docs, il indique: vous définissez "les en-têtes" sur true, ce qui pourrait entraîner une interprétation de la première ligne de données comme des en-têtes, ce qui signifie que si plusieurs colonnes ont une "null" Valeur comme valeur de données, que ces colonnes seraient fusionnées et que vous perdez les données. p> mais sans informations supplémentaires, il est vraiment difficile de dire quelque chose. Postez votre console.Log des 10 premières entrées de données pour vérifier. p> Essayez d'exclure les en-têtes, en réglant p>
Désolé, ça ne marche pas. Le journal de la console ne renvoie pas les colonnes manquantes. Je pense donc que le problème est avant fastcsv
de la DOCS: P>
TOUJOURSWRITEHeaders: {Boolean} = FALSE: défini sur true si vous voulez toujours des en-têtes écrits, même si aucune ligne de lignes n'est écrite. Remarque Cela lancera une erreur si les en-têtes ne sont pas spécifiés comme une matrice. P>
Vous pouvez utiliser le csvwriter code> au lieu de
fastcsv code> suivant
D'abord installer ce package de nœud.
CSVWriter code>
NPM I CSV-Writer --Save code> ( Link )
de
de
Ensuite, dans votre index.js ou où vous voulez votre fonction. Écrivez le code suivant. const createCsvWriter = require('csv-writer').createObjectCsvWriter;
client
.db("mydb")
.collection("mycsv")
.find({})
.toArray((err, data) => {
if (err) throw err;
console.log(data); //data must be an array of objects
const csvWriter = createCsvWriter({
path: './std_folder/Hanuman Madhi.csv',
header: [
{id: 'name', title: 'Name'}, //here id means the key of object and title means the header name displayed on the very first row of csv
{id: 'std', title: 'Std'},
{id: 'address', title: 'Address'},
]
});
csvWriter
.writeRecords(data)
.then(()=> console.log('The CSV file was written successfully'));
client.close();
});
Vous devez fournir des noms exacts des clés à l'intérieur de votre collection pour contourner ce problème
FAST-CSV, puis correspond à chaque touche avec des valeurs à l'intérieur de chaque document et affichera toutes les valeurs pour lesquelles vous avez des clés spécifiées comme suit, p>
Changez cette ligne dans laquelle vous spécifiez des en-têtes comme suit p> espère que cela aide p> p>
Le problème est sur la collection de la recherche
S'il vous plaît partager l'échantillon JSON que vous obtenez de la recherche de collection, qui serait utile
Pouvez-vous fournir la structure de données des documents et quelles colonnes contiennent
null code> valeurs?
Regardez ma solution Stackoverflow.com/a/59799747/10831557