【问题标题】:How to Importing csv file into MongoDb (using NodeJS/Express/EJS)如何将 csv 文件导入 MongoDb(使用 NodeJS/Express/EJS)
【发布时间】:2021-12-13 22:32:17
【问题描述】:

我在一个项目中可以一次添加多个项目。我希望能够使用 csv 添加多个项目。

拥有更多上下文(架构):

{
    "_id": {"$oid": "xxxxxxxxxxxxxxxx"},
    "nameCourse": "Name",
    "description": "lorem ipsum",
    "user": [{
        "_id": {"$oid": "xxxxxxxxxxxxxxxx"},
        "name": "John Doe",
        "gender": "M",
        "city": "New York",
        "email": "johndoe@email.com"
    }, 
    {
        "_id": {"$oid": "xxxxxxxxxxxxxxxx"},
        "name": "Jane Doe",
        "gender": "F",
        "city": "Tokyo",
        "email": "janedoe@email.com"
    },
    {
        "_id": {"$oid": "xxxxxxxxxxxxxxxx"},
        "name": "Jake Doe",
        "gender": "M",
        "city": "Paris",
        "email": "jakedoe@email.com"
    }],
}

(我正在使用 NodeJs/MongoDb(使用 Mongoose)/Express/EJS)

它有一个带有 input:file 和一个按钮的表单。

<form method="POST" id="add_multiple_user">
               <input type="file" name="user">
               <button type="submit">Send</button>
</form>
<script>
      $("#add_multiple_user").submit(function (event) {
      event.preventDefault();
      let idcourse = document.getElementById("id_course");

      let unindexed_array = $(this).serializeArray();
      let data = {};

      $.map(unindexed_array, function (n, i) {
        data[n["name"]] = n["value"];
      });

      let addAdresseMultiple = {
        url: `/api/course/add-multiple-user/${idcourse.innerText}`,
        method: "PUT",
        data: data,
      };

      $.ajax(addAdresseMultiple).done(function (response) {
      location.reload();
      });
      });</script>

这里是我的控制器:

exports.addMultipleUser = async (req, res) => {
  const { name, gender, city, email } = req.body;

  try {
    await UserModel.findOneAndUpdate(
      { _id: req.params.id },
      {
        $addToSet: {
          user: {
            name: name,
            gender: gender,
            city: city,
            email: email,
          },
        },
      },

      (err, docs) => {
        if (!err) return res.send(docs);
        if (err) return res.status(400).send({ message: err });
      }
    );
  } catch (err) {
    return res.status(400).json({ message: err });
  }
};

我看到有一些包(如快速 csv),但我完全不明白它对我有什么帮助。

【问题讨论】:

    标签: node.js mongodb express csv ejs


    【解决方案1】:

    感谢@Koodies 引导我走上正确的道路。

    这就是答案:

    在控制器中:

    exports.addMultipleUser = async (req, res) => {
      try {
      await csv({delimiter:";"})
      .fromFile(req.file.path)
      .then((jsonObj)=>{
        console.log(jsonObj);
        UserModel.findOneAndUpdate(
          { _id: req.params.id },
          { $addToSet: { sites: jsonObj } },
          (err, docs) => {
            if (!err) return res.send(docs);
            if (err) return res.status(500).send({ message: err });
          }
        );
        fs.unlink(req.file.path, (err) => {if(err){console.log(err); return;}})
       });
        
      } catch (err) {
        return res.status(500).json({ message: err });
      }
    };
    

    我的表单和 jquery:

    <form method="POST" id="add_multiple_user" >
       <input type="file" name="user" id="myFileUser">
       <button type="submit">Send</button>
    </form>
    <script>$("#myFileUser").change(function (e) {
      let file = e.target.files[0];
      let formData = new FormData();
      formData.append("myFileUser", file);
      $("#add_multiple_user").submit(function (event) {
        event.preventDefault();
        let idcourse = document.getElementById("id_course");
        $.ajax({
          url: `/api/course/add-multiple-user/${idcourse.innerText}`,
          type: "PUT",
          data: formData,
          processData: false,
          contentType: false,
          success: function (res) {
            console.log(res);
          },
          crossDomain: true,
        }).done(function(res) {location.reload()});
      });
      
    });</script>
    

    【讨论】:

    • 太棒了:thumbup:
    【解决方案2】:

    我不会为您发布任何答案,但这里是您可能需要突破的快速摘要。

    1. 了解multer
    2. 转换CSV to JSON
    3. 创建多个项目

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-03
      • 2021-12-30
      • 1970-01-01
      • 2013-05-01
      • 2013-06-04
      相关资源
      最近更新 更多