Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 更新Mongo DB中的嵌套数组元素值_Javascript_Node.js_Mongodb_Mongoose_Mern - Fatal编程技术网

Javascript 更新Mongo DB中的嵌套数组元素值

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 }, 创建于:{ 类型:日期

我是MERN的新手,我为老师们创建了一个检查作业的系统。 我的模式如下所示

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)},它非常适合我。你救了我。