Как выполнить массовую загрузку в мангусте (node.js)

Я пытаюсь выполнить массовую загрузку в node js, и mongodb — это моя база данных, может ли кто-нибудь предложить мне несколько лучших статей по этому поводу. Заранее спасибо.


person MMR    schedule 21.12.2016    source источник


Ответы (2)


Вы можете вставить несколько записей с помощью пакетной/массовой вставки в мангусте.

var arr = [{ name: 'Star Wars' }, { name: 'The Empire Strikes Back' }];
Movies.insertMany(arr, function(error, docs) {});

Допустим, у меня есть файл Excel employees.xlsx со следующими данными, и я хочу выполнить массовую запись.

сотрудники.xlsx

Существует несколько библиотек для преобразования данных Excel в json в узле, я использую xlsx, но это личный вкус, вы можете использовать все, что вам удобно.

Вот помощник, который я использую для чтения файла "/public/employees.xlsx". Я нашел содержимое отсюда здесь.

 //** helper/excel-reader.js **//

var excelReader = {};
excelReader.readExcel =  function(filePath){     

  var XLSX = require('xlsx');
  var workbook = XLSX.readFile(filePath);
  var sheet_name_list = workbook.SheetNames;
  var data = [];

  sheet_name_list.forEach(function(y) {
    var worksheet = workbook.Sheets[y];
    var headers = {};

    for(z in worksheet) {
        if(z[0] === '!') continue;
        //parse out the column, row, and value
        var tt = 0;
        for (var i = 0; i < z.length; i++) {
            if (!isNaN(z[i])) {
                tt = i;
                break;
            }
        };
        var col = z.substring(0,tt);
        var row = parseInt(z.substring(tt));
        var value = worksheet[z].v;

        //store header names
        if(row == 1 && value) {
            headers[col] = value;
            continue;
        }

        if(!data[row]) data[row]={};
        data[row][headers[col]] = value;
    }
    //drop those first two rows which are empty
    data.shift();
    data.shift();       
  });
 return data;
}

module.exports = excelReader;

Сейчас модель сотрудника как-то так выглядит.

var mongoose =  require('mongoose');
var Schema =  mongoose.Schema;

var employee = new Schema({
    name: String,
    adderess: String,
    phonenumber: String
});

module.exports = mongoose.model('Employee', employee);

Теперь давайте воспользуемся приведенным выше кодом, так что вот мой маршрут users.js всякий раз, когда я набираю «localhost:3000/users», он записывает содержимое csv в базу данных.

var express = require('express');
var router = express.Router();
var excelReader = require('../helpers/excel-reader');
var mongoose = require('mongoose');
var Employee = require('../models/employee');

 /* GET users listing. */
router.get('/', function(req, res, next) {
  var employeesJsonArray = excelReader.readExcel('./public/employees.xlsx') 
  Employee.insertMany(employeesJsonArray,function(error, docs) {
    if(error){
      next(error)
    }
    else{
      res.json(docs);//just rendering the document i got
    } 
   });
});
module.exports = router;

Надеюсь это поможет!!

person Saroj    schedule 21.12.2016
comment
Вау, работает как положено, спасибо - person Abiram; 27.04.2020

Вы можете использовать Model.collection.insert или Model.insertMany, как показано ниже, где collections — массив элементов.

Model.collection.insert(collections, function (err, models) {
   next(err, models);
});

OR,

Model.insertMany(collections, function (err, models) {
   next(err, models);
});

Ссылка на Mongoose: http://mongoosejs.com/docs/api.html#model_Model.insertMany

Ссылка на Mongo: https://docs.mongodb.com/v3.2/reference/method/db.collection.insert/

person Aruna    schedule 21.12.2016
comment
Привет, Аруна, как я могу получить данные листа xlx в коллекции? - person MMR; 21.12.2016