Skip to content

Instantly share code, notes, and snippets.

@sankarcheppali
Created September 27, 2019 02:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sankarcheppali/ceaac5423d0618508164a013b96605d9 to your computer and use it in GitHub Desktop.
Save sankarcheppali/ceaac5423d0618508164a013b96605d9 to your computer and use it in GitHub Desktop.
generate report on a mongodb collection using nodejs
const mongoose = require('mongoose')
const util = require('util')
const stream = require('stream')
const pipeline = util.promisify(stream.pipeline)
const stringify = require('csv-stringify')
const fs = require('fs')
const fsp = require('fs').promises
let schema = mongoose.Schema({
name:String,
email:String,
gender:String,
active:{type:Boolean,default:true},
});
let User=mongoose.model('user',schema);
async function generateReport(){
//create query cursor
let usersCursor= User.find({active:true}).cursor({transform:(user)=>{
let {_id:userId,email,gender}= user.toObject()
return {userId,email,gender}
}})
//create object to csv transformer
let csvStream = stringify({
header: true,
columns: {
userId: 'USER_ID',
email:'EMAIL',
gender: 'GENDER',
}
})
//create a file sink
let dst = `./report.csv`
await pipeline(usersCursor,csvStream,fs.createWriteStream(dst))
console.log('report generated')
}
mongoose.connect('mongodb://localhost:27017/test_db', { useNewUrlParser: true, reconnectTries: Number.MAX_VALUE }, function(err) {
if (err) {
console.error( 'Couldnt connect to MongoDB:', err);
} else {
console.log('Connected to MongoDB');
generateReport()
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment