Created
September 27, 2019 02:05
-
-
Save sankarcheppali/ceaac5423d0618508164a013b96605d9 to your computer and use it in GitHub Desktop.
generate report on a mongodb collection using nodejs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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