Last active
December 23, 2015 12:45
-
-
Save omeroot/67791f9b315cd5f00510 to your computer and use it in GitHub Desktop.
mongodb collection it contains multi language words(swear) and this util library export this collection to excel and stream to frontend
This file contains hidden or 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
| /* | |
| * EXAMPLE MONGODB BLACKLIST DOCUMENT OBJECT | |
| * | |
| * { | |
| * _id : <mongoId>, | |
| * language: <which language this word>, | |
| * word : <word> | |
| * } | |
| * | |
| * DEPENDENCIES | |
| * | |
| * streamifier | |
| * mongoose | |
| * node-xlsx | |
| * | |
| node-xlsx data structure | |
| [ [col1,col2,...] , [col1,col2,...] , [col1,col2,...] , [col1,col2,...] , [col1,col2,...] ] | |
| ↑ ↑ ↑ ↑ ↑ | |
| row1 row2 row3 row4 row5 | |
| example excel output | |
| _____ ______ ______ _____ _____ | |
| | tr | en | ru | de | ar | | |
| ------------------------------- | | |
| | piç | fuck | ... | ... | ... | | |
| */ | |
| var mongoose = require('mongoose'); | |
| var streamifier = require('streamifier');//buffer to stream utils | |
| var xlsx = require('node-xlsx');//excel library | |
| var BlackList = mongoose.model('BlackList');//blacklist mongoose model | |
| BlackList.aggregate([ | |
| { | |
| $group: { | |
| '_id': {language: '$language'}, | |
| 'word': {'$addToSet': '$word'}, | |
| 'counter': {$sum: 1} | |
| } | |
| }, | |
| { | |
| $sort: {'counter': 1} | |
| } | |
| ], function (err, result) { | |
| if (err) { | |
| console.log('MONGO ERROR', err); | |
| } else { | |
| var maxSize = result[result.length - 1].counter; | |
| var data = [[]]; | |
| var indexer = {}; | |
| for (var i = 0; i < result.length; i++) { | |
| data[0][i] = result[i]._id.language; | |
| indexer[result[i]._id.language] = i; | |
| } | |
| for (var j = 0; j < maxSize; j++) { | |
| var row = []; | |
| for (var k = 0; k < result.length; k++) { | |
| var language = result[k]._id.language; | |
| if (j + 1 <= result[k].word.length) { | |
| row[parseInt(indexer[language])] = result[k].word[j]; | |
| } | |
| } | |
| data[j + 1] = row; | |
| } | |
| var buffer = xlsx.build([{name: new Date().getTime().toString(), data: data}]); | |
| var size = buffer.length; | |
| res.writeHead(200, { | |
| 'Content-Length': size, | |
| 'Content-Type': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' | |
| }); | |
| //stream excel to response | |
| streamifier.createReadStream(buffer).pipe(res); | |
| } | |
| }); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment