【问题标题】:How to read out NodeJS form Data and write to MongoDB如何读取 NodeJS 表单数据并写入 MongoDB
【发布时间】:2020-05-18 06:21:57
【问题描述】:

我创建了一个简单的动态单页表单,它根据 x 人数呈现多个字段。我在正文解析器中使用了扩展设置来提交我的 html 中的嵌套对象。

当我控制台日志 req.body 我得到这个:

    {
    user: {
        '10': {
            attending: '1',
            dietaryRequirements: 'None'
        },
        '11': {
            attending: '0',
            dietaryRequirements: 'Not Applicable'
        }
    }
}

读取 ID(10 和 11)并将参加和饮食要求字段写入 MongoDB 的最简单方法是什么。 感谢您的帮助!

【问题讨论】:

  • 你是在使用 mongoose 作为 orm 的 express 吗?
  • 是的,我正在使用 Mongoose!

标签: javascript html node.js express mongoose


【解决方案1】:

嗯,你必须首先定义一个 Schema。

//this is ../models/user.model file

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
//Define user model schema
const userSchema = new Schema({
    _id: String,
    attending: { type: Number, required: true },
    dietaryRequirements: String,
}, {
    timestamps: true
});
const User= mongoose.model('users', userSchema );
module.exports = User;

然后,您将用户作为对象,因此您需要将数据插入数组 作为对象。每个对象都需要匹配到您定义的模式。当您将用户对象添加到数组时,您可以轻松调用来自用户架构的 mongoose insertMany() 方法。

const User= require('../models/user.model');
const { user } = req.body;
console.log(user );
let userItems= Object.keys(user).map(userItem => {
         return {
               _id: userItem,
               attending: user[userItem ].attending,
               dietaryRequirements: user[userItem ].dietaryRequirements,
          }
 });
 try {
      await User.insertMany(userItems);

      res.status(200).json({ status: true });
  } catch (error) {
      console.log(error);
  }

这个User.insertMany(userItems)方法'await'直到所有数据都保存在mongo db中,因此你必须在快速路由器中使用'async'关键字。

了解更多here

更新多个随机用户

这里你可以使用异步循环然后代码会很快。

let updateResponces = await Promise.all(userItems.map(user=>{
   User.updateOne({ _id: user._id }, { attending: 'true'});
});

【讨论】:

  • 几乎完美,我将如何更新记录。我试过 User.updateMany({_id: userItems._id}, { "$set": { "attending": "true" } }, );但它似乎没有工作。谢谢!
  • 您想为特定的人(多个)设置“出席”对吧?
  • 是的,正确。我想更新多条记录以显示他们是否参加。我还将参加的值更改为 true 或 false,以便我可以更新 MongoDB 中的布尔类型。
  • @CameronRose 在这种情况下你不能使用 updateMany 因为你没有更新每个用户的参考。例如,您可以 updateMany 与所有已经出席真实的人。知道了?因此,在您的情况下,没有参考,只有随机用户。因此,您可以为此使用循环。如果你喜欢这种方法,我会更新我的答案。
  • 哦,我明白了,是的,如果您不介意,请更新您的答案! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-19
  • 2016-09-19
  • 2019-10-08
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
相关资源
最近更新 更多