Javascript 如何读取NodeJS表单数据并写入MongoDB
我创建了一个简单的动态单页表单,它根据x个人数呈现多个字段。我使用了主体解析器中的扩展设置来提交html中的嵌套对象 当我输入控制台log req.body时,我得到以下信息: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',
{
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。知道了?所以在你的例子中,除了随机用户,没有参考。因此,您可以为此使用循环。如果你喜欢这种方法,我会更新我的答案。哦,我明白了,是的,如果你不介意的话,你能更新你的答案吗