javascript - I'm trying to import Excel to Mongodb from Meteor, How can I get every _id to my documents? -


for each document in mongodb should have _id, i'm trying import excel mongodb meteor. has 1 _id, result looks beautiful it's not expect, please me solve this.

my code:

import { template } 'meteor/templating'; import { reactivevar } 'meteor/reactive-var'; import { excels } '../imports/api/excels.js';  import './main.html';  const xlsx = require('xlsx');  template.read.events({     'change input' (evt, instance) {         /* "browser file upload form element" sheetjs readme */         const file = evt.currenttarget.files[0];         const reader = new filereader();         reader.onload = function(e) {             const data = e.target.result;             const name = file.name;             /* meteor magic */             meteor.call('upload', data, name, function(err, wb) {                 if(err) console.error(err);                 else {                     /* here -- dumps array of arrays console */                     console.log(xlsx.utils.sheet_to_json(wb.sheets[wb.sheetnames[0]], {header:1}));                     document.getelementbyid('out').innerhtml = json.stringify(xlsx.utils.sheet_to_json(wb.sheets[wb.sheetnames[0]]),2,2);                     excels.insert({ "spreadsheet": xlsx.utils.sheet_to_json(wb.sheets[wb.sheetnames[0]]) });                 }             });         };         reader.readasbinarystring(file);     }, }); 

and result:

meteor:primary> db.excels.find() { "_id" : "pc3nxfpgutdwe4psf", "spreadsheet" : [ { *** information here *** 

expected result:

meteor:primary> db.excels.find() {     {      "_id" : "pc3nxfpgutdwe4psf", "first" : "first"     },    {      "_id" : "pc3nxfpgutdwe4psg", "second" : "second"     }, ..... 

server/main.js

import { meteor } 'meteor/meteor'; import '../imports/api/excels.js';  const xlsx = require('xlsx');  meteor.methods({         upload: (bstr, name) => {                 /* read data , return workbook object frontend */                 return xlsx.read(bstr, {type:'binary'});         },         download: () => {                 /* generate workbook object , return frontend */                 const data = [                         ["a", "b", "c"],                         [ 1 ,  2 ,  3 ]                 ];                 const ws = xlsx.utils.aoa_to_sheet(data);                 const wb = {sheetnames: ["sheet1"], sheets:{sheet1:ws }};                 return wb;         } });  meteor.startup(() => { }); 

imports/api/excels.js

import { mongo } 'meteor/mongo';  export const excels = new mongo.collection('excels'); 

mongodb collection:

{ "_id" : "bhvkswwqfrjhcwyc2", "spreadsheet" : [ { "line number" : "1", "item name" : "ms425-32-hw", "description" : "meraki ms425-32 l3 cld-mngd 32x 10g sfp+ switch", "quantity" : "2", "installed" : "2", "spare" : "0" }, { "line number" : "2", "item name" : "ms225-48-hw", "description" : "meraki ms225-48 l2 stck cld-mngd 48x gige switch", "quantity" : "2", "installed" : "2", "spare" : "0" }, { "line number" : "3", "item name" : "ms225-48fp-hw", "description" : "meraki ms225-48fp l2 stck cld-mngd 48x gige 740w poe switch", "quantity" : "14", "installed" : "12", "spare" : "2" }, { "line number" : "4", "item name" : "mr72-hw", "description" : "meraki mr72 cloud managed ap", "quantity" : "14", "installed" : "13", "spare" : "1" }, { "line number" : "4.1", "item name" : "ma-ant-20", "description" : "meraki dual band omni antennas", "quantity" : "56", "installed" : "52", "spare" : "4" }, { "line number" : "5", "item name" : "mr33-hw", "description" : "meraki mr33 cloud managed ap", "quantity" : "20", "installed" : "18", "spare" : "2" }, { "line number" : "6", "item name" : "mx400-hw", "description" : "meraki mx400 cloud managed security appliance", "quantity" : "2", "installed" : "2", "spare" : "0" }, { "line number" : "7", "item name" : "n3k-c3524p-10gx", "description" : "nexus 3524x, 24 10g ports", "quantity" : "2", "installed" : "2", "spare" : "0" }, { "line number" : "8", "item name" : "ma-sfp-10gb-lrm", "description" : "meraki 10g base lrm", "quantity" : "56", "installed" : "48", "spare" : "8" }, { "line number" : "9", "item name" : "ma-sfp-10gb-sr", "description" : "meraki 10g base sr multi-mode", "quantity" : "16", "installed" : "16", "spare" : "0" }, { "line number" : "10", "item name" : "sfp-10g-sr=", "description" : "10gbase-sr sfp module", "quantity" : "8", "installed" : "8", "spare" : "0" } ] } 

document.getelementbyid('out').innerhtml = json.stringify(xlsx.utils.sheet_to_json(wb.sheets[wb.sheetnames[0]]),2,2);

    [       {         "line number": "1",         "item name": "ms425-32-hw",         "description": "meraki ms425-32 l3 cld-mngd 32x 10g sfp+ switch",         "quantity": "2",         "installed": "2",         "spare": "0"       },       {         "line number": "2",         "item name": "ms225-48-hw",         "description": "meraki ms225-48 l2 stck cld-mngd 48x gige switch",         "quantity": "2",         "installed": "2",         "spare": "0"       },       {         "line number": "3",         "item name": "ms225-48fp-hw",         "description": "meraki ms225-48fp l2 stck cld-mngd 48x gige 740w poe switch",         "quantity": "14",         "installed": "12",         "spare": "2"       },     ....     ] 

you inserting array collection key spreadsheet on line:

excels.insert({ "spreadsheet": xlsx.utils.sheet_to_json(wb.sheets[wb.sheetnames[0]]) }); 

this why see key spreadsheet:

{ "_id" : "bhvkswwqfrjhcwyc2", "spreadsheet" : ... 

but take want insert every element of array own document, every row of spreadsheet produce own id. you'd remove spreadsheet , insert array whole:

excels.insert(xlsx.utils.sheet_to_json(wb.sheets[wb.sheetnames[0]])) 

however, [1, 2], seems meteor not support inserting array root document, therefore must loop through each row , insert them individually:

xlsx.utils.sheet_to_json(wb.sheets[wb.sheetnames[0]]).foreach(r => excels.insert(r)); 

Comments

Popular posts from this blog

ubuntu - PHP script to find files of certain extensions in a directory, returns populated array when run in browser, but empty array when run from terminal -

php - How can i create a user dashboard -

javascript - How to detect toggling of the fullscreen-toolbar in jQuery Mobile? -