0

我正在为excel创建一个rest api。如何为可以由用户上传任意字段的 excel 文件创建 MongoDB 模式?

4

2 回答 2

0

根据定义,“模式”几乎是“任意字段”的反义词。如果您的输入数据确实是完全任意的,那么您显然无法使用模式来描述或验证它。

于 2022-01-13T09:11:44.863 回答
0

首先,我们可以定义一个名为excelData.model.js的模型,它有一个数据字段,可以接受来自 excel 文件的值数组:

const mongoose = require("mongoose")
const idvalidator = require("mongoose-id-validator");

const excelDataSchema = new mongoose.Schema({
    Data:{
      type: Array,
      required: true
    }
})
excelDataSchema.plugin(idvalidator);
const ExcelData = mongoose.model('excelData',excelDataSchema)
exports.ExcelData = ExcelData

然后我们可以定义excelData.controller.js这是一个控制器,它具有读取 excel 文件并从中提取数据的功能,然后调用模型来保存数据

const readExcelFile = require('read-excel-file/node')
const { ExcelData } = require("../models/excelData.model");

exports.excelDataExtractor = async (req, res) => {
    try {
        if (req.file == undefined) {
            return res.status(400).send("Please upload an excel file!");
        }
        readExcelFile(req.file.path)
            .then(async (rows) => {
                var data = []
                for (let i = 0; i < rows.length; i++) {
                    data.push(rows[i])
                }
                for (let i = 0; i < data.length; i++) {
                    try {
                        let excelData = new ExcelData({ data: data[i] })
                        await excelData.save()
                    } catch (ex) {
                        res.status(400).send(ex.message);
                    }
                }
                return res.status(200).send({
                    message: "Excel Data extracted successfully",
                    data
                })
            })
            .catch(error => {
                return res.status(400).send({
                    message: "Failed to read the uploaded excel file!",
                    error: error.message
                });
            })
    } catch (ex) {
        res.status(500).send(ex.message);
    }
}

于 2022-01-13T06:42:02.927 回答