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('/')
                        }
                    });
                });
           }
})

Приведенный выше код создаст дисковое хранилище для хранения файла в общей папке корневого каталога. При нажатии на кнопку «Отправить» данные извлекаются из каждой строки загруженного файла и будут импортированы в студенческую коллекцию с использованием множества методов вставки.

Удачного кодирования!