Javascript 更新Mongo DB中的嵌套数组元素值
我是MERN的新手,我为老师们创建了一个检查作业的系统。 我的模式如下所示Javascript 更新Mongo DB中的嵌套数组元素值,javascript,node.js,mongodb,mongoose,mern,Javascript,Node.js,Mongodb,Mongoose,Mern,我是MERN的新手,我为老师们创建了一个检查作业的系统。 我的模式如下所示 const mongoose=require('mongoose')) const xyzSchema=新的mongoose.Schema({ 用户:{ 类型:mongoose.Schema.Types.ObjectId, 参考:'user\u collections' }, 任务:[{ 职务分配:{ 类型:字符串, 必填项:true }, 说明和分配:{ 类型:字符串, 必填项:true }, 创建于:{ 类型:日期
const mongoose=require('mongoose'))
const xyzSchema=新的mongoose.Schema({
用户:{
类型:mongoose.Schema.Types.ObjectId,
参考:'user\u collections'
},
任务:[{
职务分配:{
类型:字符串,
必填项:true
},
说明和分配:{
类型:字符串,
必填项:true
},
创建于:{
类型:日期,
要求:正确,
默认值:Date.now()
},
文件:[],
提交:[{
用户:{
类型:mongoose.Schema.Types.ObjectId,
参考:'user\u collections'
},
文件:[],
创建于:{
类型:日期,
要求:正确,
默认值:Date.now()
},
检查:{
类型:布尔型,
默认值:false
}
}],
到期日:{
类型:日期,
必填项:true
}
}],
})
module.exports=mongoose.model('abc',xyzchema)
您需要使用$[]
标识符。使用更新中的阵列过滤器
如果ID是ObjectId,则还需要使用mongoose.Types.ObjectId()
将ID转换为Mongodb对象ID,否则可能是查询没有错误,但字段不会更新
let check = await Classroom.update(
{},
{ $set: {"assignments.$[assign].submitted.$[submitt].checked": "true" }},
{
arrayFilters: [
{
"assign._id": mongoose.Types.ObjectId(req.body.assignment_id)
},
{
"submitt.user": mongoose.Types.ObjectId(req.body.user_id)
}
]
}
$
标识符仅适用于1级深度,如果超过此深度,则需要使用阵列过滤器
非常感谢您的帮助。它确实为该用户更新了false-true的值,但删除了提交数组中的所有其他记录。@Akshaykalkal奇怪,到底删除了什么?我在submittd数组中有2条记录。当我更新1个用户的记录时,另一个记录被删除。第一条记录也成功更新了。@Akshaykall检查拼写错误,如果没有看到完整的代码,我也帮不了你。非常感谢你的帮助。我刚刚在第一部分中添加了{“assignments.\u id”:mongoose.Types.ObjectId(req.body.assignment\u id)},它非常适合我。你救了我。