node.js - 在猫鼬中使用嵌入式文档更新文档不起作用
问题描述
我有一个名为的集合classroom
,它已经有记录。我想用名为timetable
. 当我执行更新操作时,这会显示在控制台中{ ok: 0, n: 0, nModified: 0 }
。并且文件没有更新。
课堂模式
var ClassroomSchema = new mongoose.Schema ({
classroom_name: {
type:String,
required:true,
unique: true,
},
classroom_blok:{
type:String,
required:true,
},
classroom_floor: {
type:String,
required:true,
},
timetable:
{
timeslot: {
required: true,
'type': String,
},
subject :{
type: mongoose.Schema.Types.ObjectId,
ref: 'Subject'
},
teacher :{
type: mongoose.Schema.Types.ObjectId,
ref: 'Teacher'
},
day :{
type:String,
required: true,
},
year :{
type:String,
required: true,
},
session :{
type:String,
required:true,
}
}
});
更新操作
router.post('/timetable_morning', function (req, res, next) {
if (
req.body.teacher &&
req.body.timeslot,
req.body.subject,
req.body.classroom,
req.body.session,
req.body.day) {
var timetableData = {
teacher: req.body.teacher,
timeslot: req.body.timeslot,
subject: req.body.subject,
classroom: req.body.classroom,
year: currentYear,
day: req.body.day,
session: req.body.session
}
//use schema.create to insert data into the db
var timetableData1 = {
teacher: req.body.teacher,
timeslot: req.body.timeslot,
subject: req.body.subject,
classroom: req.body.classroom,
year: currentYear,
day: req.body.day,
session: req.body.session
}
Classroom.updateOne({_id:req.body.classroom},timetableData1,function(err,classroom){
if(!err){
console.log(classroom);
return res.redirect('/timetable');
}
});
} else {
var err = new Error('All fields have to be filled out');
err.status = 400;
return next(err);
}
});
现有文件示例
{
"_id" : ObjectId("5ee3943833325c210c9a7fee"),
"classroom_name" : "6 Musytari",
"classroom_blok" : "A",
"classroom_floor" : "2",
"__v" : 0
}
解决方案
你的处理函数可以是这样的
router.post('/timetable_morning/:classroom_id', function (req, res, next) {
let dataObj = {
subject: req.body.subject,
teacher: req.body.teacher,
timeslot: req.body.timeslot,
year: currentYear,
day: req.body.day,
session: req.body.session
}
db['Classroom'].updateOne({_id: req.params.classroom_id}, {timetable: dataObj}).then(data => {
if (data.nModified !== 0) {
console.log("updated successfully")
} else {
console.log("Something went wrong")
}
}).catch(err => {
console.log(err)
})})
笔记
请在此处记下字段classic_id应该是mongodb ObjectID,您将作为参数传递给您的路由处理程序函数
我还注意到您的有效负载在更新导致问题的文档时还有一个现场教室,因为您正在尝试更新时间表嵌入文档没有的值。
推荐阅读
- c# - 在 WPF 应用程序中支持 Windows 11 对齐布局
- cypress - 在 Cypress.io 测试中两次调用钩子之前
- firefox - 如何在 Firefox 中注销 Shared Worker
- f# - 如何将 F# 结果类型列表拆分为内部类型列表
- python - Keras 输入 Pandas 数据框
- c# - 将 prometheus 静态标签添加到公共交通指标
- html - 移动/缩放 HTML 元素会在整个地方留下边框残留物
- asp.net - 从 NET4.8 迁移到 NET5/Core,是否需要 Full Framework?
- python - 如何从嵌套的字典键和值列表中创建多索引数据框?
- flutter - 如何在颤动中更改另一个类中变量的值