MongoDB — это документно-ориентированная база данных NoSQL с открытым исходным кодом, которая хранит данные в формате JSON. Это распределенная база данных, предназначенная для хранения больших объемов данных.
В этой статье мы рассмотрим, как данные Excel могут быть импортированы в базу данных MongoDB и сохранены в виде документа в указанной коллекции. Реализация MongoDB выполняется с помощью Node.js + Express.js, и он будет считывать данные с листа Excel и импортировать их прямо в вашу базу данных.
Настройка проекта
Создать проект из терминала
mkdir my-app
cd my-app
npm init
Установите npm-модули
npm install express csvtojson mongoose multer ejs
Multer: Multer — это промежуточное ПО node.js для обработки данных из нескольких частей/форм, в основном используемое для загрузки файлов.
csvtojson: этот модуль используется для преобразования файла CSV в файл JSON.
Создать экспресс-приложение Node.js
Создайте файл с именем app.js и импортируйте модули.
const express = require('express')
const mongoose = require('mongoose')
const multer = require('multer')
const Student = require('./studentSchema')
const csvtojson = require('csvtojson')
const app = express()
mongoose.connect('mongodb://localhost:27017/MongoExcelDemo').then(() => { // MongoDB connection
console.log('database connected')
});
app.use(express.static('public')) // static folder
app.set('view engine','ejs') // set the template engine
app.listen(3000, () => {
console.log('server started at port 3000')
})
Студенческий модуль в базе данных
Здесь мы собираемся создать студенческий модуль, создав файл student.js для хранения данных учащегося в именованной коллекции Student.
const mongoose = require('mongoose')
const studentSchema = mongoose.schema({
name : {type : String, required : true},
email : {type: String, required : true},
standard : {type: String, required: true}
})
module.exports = mongoose.model('Student', studentSchema)
Создайте разметку формы для загрузки файла excel в файл index.ejs.
Здесь форма будет принимать данные из файла Excel, этот файл должен быть в формате CSV.
<HTML>
<body>
<form action="/uploadExcelFile" enctype="multipart/form-data" method="post">
<input type="file" name="uploadfile" accept='application/vnd.openxmlformats-
officedocument.spreadsheetml.sheet, application/vnd.ms-excel' >
<input type="submit" class="p-10 w-100" value="Upload Excel">
</form>
</body>
</html>
Загрузка файла в базу данных
Multer довольно популярен благодаря своей эффективности и простоте обработки файлов на экспресс-сервере.
Чтобы экспресс-приложение могло принимать файлы, мы будем использовать хранилище Multer для обработки загрузки файлов. Это хранилище будет использоваться для доступа к загруженному файлу.
App.js
var excelStorage = multer.diskStorage({ destination:(req,file,cb)=>{ cb(null,'./public/excelUploads'); // file added to the public folder of the root directory }, filename:(req,file,cb)=>{ cb(null,file.originalname); } }); var excelUploads = multer({storage:excelStorage});
app.get('/',(req,res) => { res.render('index.ejs'); })
// upload excel file and import in mongodb app.post('/uploadExcelFile', excelUploads.single("uploadfile"), (req, res) =>{ importFile('./public' + '/excelUploads/' + req.file.filename); function importFile(filePath){ // Read Excel File to Json Data var arrayToInsert = []; csvtojson().fromFile(filePath).then(source => {
// Fetching the all data from each row for (var i = 0; i < source.length; i++) { console.log(source[i]["name"]) var singleRow = { name: source[i]["name"], email: source[i]["email"], standard: source[i]["standard"], }; arrayToInsert.push(singleRow); }
//inserting into the table student Student.insertMany(arrayToInsert, (err, result) => { if (err) console.log(err); if(result){ console.log("File imported successfully."); res.redirect('/') } }); }); } })
Приведенный выше код создаст дисковое хранилище для хранения файла в общей папке корневого каталога. При нажатии на кнопку «Отправить» данные извлекаются из каждой строки загруженного файла и будут импортированы в студенческую коллекцию с использованием множества методов вставки.
Удачного кодирования!