For each document in MongoDB should have _id, so I'm trying to import Excel to my MongoDB from Meteor. But Everything has only one _id, the result looks beautiful but it's not as I expect, please help me to solve this.
My code:
import { Template } from 'meteor/templating';
import { ReactiveVar } from 'meteor/reactive-var';
import { Excels } from '../imports/api/excels.js';
import './main.html';
const XLSX = require('xlsx');
Template.read.events({
'change input' (evt, instance) {
/* "Browser file upload form element" from 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 {
/* do something here -- this just dumps an array of arrays to 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 the result:
meteor:PRIMARY> db.excels.find()
{ "_id" : "Pc3nXFpGuTdwe4psf", "spreadsheet" : [ { *** All information here ***
Expected result:
meteor:PRIMARY> db.excels.find()
{
{
"_id" : "Pc3nXFpGuTdwe4psf", "first" : "first"
},
{
"_id" : "Pc3nXFpGuTdwe4psg", "second" : "second"
},
.....
server/main.js
import { Meteor } from 'meteor/meteor';
import '../imports/api/excels.js';
const XLSX = require('xlsx');
Meteor.methods({
upload: (bstr, name) => {
/* read the data and return the workbook object to the frontend */
return XLSX.read(bstr, {type:'binary'});
},
download: () => {
/* generate a workbook object and return to the 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 } from '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"
},
....
]