javascript - 如何在 MongoDB 中保存数据?不是一次所有的字段
问题描述
我创建了一个模式来存储用户详细信息和一些关于它的测试的信息。
const mongoose = require("mongoose");
const schema = mongoose.Schema;
const userSchema = new schema({
name: { type: String },
gender: { type: String },
stream: { type: String },
email: {
type: String,
required: true,
unique: true,
match: /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/,
},
verified: { type: Boolean, default: false },
password: { type: String, required: true },
// For premium Calculations
test: {
type1Count: { type: Number, default: 0 },
type2Count: { type: Number, default: 0 },
type3Count: { type: Number, default: 0 },
},
testCompleted: [
{
testId: { type: String },
testDate: { type: Number },
testTypeNumber: { type: Number },
testTypeName: { type: Number },
testDurationInMinutes: {type: Number},
listOfQuestionId: [{ type: String }],
listOfCorrectAnswer: [{ type: Number }],
listOfAnswerByUser: [{ type: Number }],
totalNumberOfQuestion: { type: Number },
numberOfAttemptedQuestion: { type: Number },
numberOfUnattemptedQuestion: { type: Number },
numberOfCorrectAnswer: { type: Number },
numberOfWrongAnswer: { type: Number },
marksObtained: {type: Number},
isTestCompleted : {type: Boolean, default: false}
},
]
});
module.exports = mongoose.model("User", userSchema);
现在,我不是一次保存所有数据,首先,我将只保存它的注册部分,如姓名、电子邮件、密码。注册用户的代码...
const newUser = new User({
name,
email,
password,
});
const salt = await bcrypt.genSalt(10);
newUser.password = await bcrypt.hash(password, salt);
await newUser.save();
现在在我的数据库中创建了一个用户。现在我想保存这些数据... // 有一些逻辑,但数据很好..
var paper = {
testId: Object.keys(user.testCompleted).length +1, // I choose Normal serialise Number starting from 1
testDate: Date.now(),
testTypeNumber: type,
testTypeName: testList[type - 1]["testName"],
testDurationInMinutes: testList[type - 1]["testDurationInMinutes"],
weightageOfQuestion: list[type - 1],
totalNumberOfQuestion: list[type - 1]["physics"] + list[type - 1]["chemistry"] + list[type - 1]["biology"],
listOfQuestionId: arrayOfQuestion,
listOfCorrectAnswer: arrayOfAnswer,
};
现在我之前已经创建了一个用户,在后期,我必须将纸张数据保存在 testCompleted [] 集合中,它是一个对象数组
并且在后期我必须将这些数据存储在同一个 testCompleted [] 设置中,
const data = {
totalNumberOfQuestion: totalNumberOfQuestion,
numberOfAttemptedQuestion: attempt,
numberOfUnattemptedQuestion: totalNumberOfQuestion - attempt,
numberOfCorrectAnswer: attempt - wrong,
numberOfWrongAnswer: wrong,
marksObtained: marks,
isTestCompleted: true
}
请帮助我,如何在任何时候将数据部分保存在 mongodb 中?
解决方案
更新文档内数组的两种方法:
找到文档,然后push()
用于添加到数组中,然后调用.save()
.
const userToUpdate = await User.find({_id:userId})
userToUpdate.testCompleted.push(data)
userToUpdate.save()
使用findOneAndUpdate()
或update()
和$push
User.update(
{ _id: userId },
{ $push: { testCompleted: data } },
done
);
推荐阅读
- spring-webflux - Spring Cloud 网关用例
- c - 为什么我的while循环一次后无法执行?
- java - 如何在ui线程上刷新回收器视图
- r - 使用ggtree对系统发育树的提示进行着色
- c - 在linux中查找IOCTL号
- c# - 接收关于统一的 } 预期和命名空间问题
- excel - 如何在数据透视表(Excel)的交叉表中显示“小计的百分比”
- java - 如何在 Android Studio 中调整圆形按钮背景?
- javascript - React-router-dom,NavLink - 渲染问题
- asp.net-core-mvc - Mailkit 唯一的电子邮件对话 ID 是什么?