Javascript 如何读取NodeJS表单数据并写入MongoDB

Javascript 如何读取NodeJS表单数据并写入MongoDB,javascript,html,node.js,express,mongoose,Javascript,Html,Node.js,Express,Mongoose,我创建了一个简单的动态单页表单,它根据x个人数呈现多个字段。我使用了主体解析器中的扩展设置来提交html中的嵌套对象 当我输入控制台log req.body时,我得到以下信息: { user: { '10': { attending: '1', dietaryRequirements: 'None' }, '11': { attending: '0',

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

当我输入控制台log req.body时,我得到以下信息:

    {
    user: {
        '10': {
            attending: '1',
            dietaryRequirements: 'None'
        },
        '11': {
            attending: '0',
            dietaryRequirements: 'Not Applicable'
        }
    }
}
读取ID 10和11并将就诊和饮食要求字段写入MongoDB的最简单方法是什么。
谢谢你的帮助

首先,您必须定义一个模式

//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.insertManyuserItems方法“等待”直到所有数据保存在mongo db中,因此您必须在express router中使用“async”关键字

更多

更新多个随机用户

在这里,您可以使用异步循环,然后代码将很快

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

你在用mongoose作为orm和express吗?是的,我在用mongoose!几乎完美了,我该如何更新记录呢。我试过User.updateMany{{u id:userItems.{u id},{$set:{attenting:true};但它似乎不起作用。谢谢是否要将“出席”设置为多个特定人员?是,正确。我想更新多个记录以显示他们是否参加。我还将出席的值更改为true或false,以便在MongoDB中更新布尔类型。@CameronRose在这种情况下,您不能使用updateMany,因为您没有更新每个用户的引用。例如,您可以与所有已参加true的人员一起更新Many。知道了?所以在你的例子中,除了随机用户,没有参考。因此,您可以为此使用循环。如果你喜欢这种方法,我会更新我的答案。哦,我明白了,是的,如果你不介意的话,你能更新你的答案吗