[英]Updating the nested array element value in Mongo DB
我是 MERN 的新手,我為老師創建了一個系統來檢查作業。 我的架構看起來像這樣
const mongoose = require('mongoose') const xyzSchema = new mongoose.Schema({ user:{ type:mongoose.Schema.Types.ObjectId, ref:'user_collections' }, assignments:[{ title_assignment:{ type:String, required:true }, description_assignment:{ type:String, required:true }, created_at:{ type:Date, required:true, default:Date.now() }, files:[], submitted:[{ user:{ type:mongoose.Schema.Types.ObjectId, ref:'user_collections' }, files:[], created_at:{ type:Date, required:true, default:Date.now() }, checked:{ type:Boolean, default:false } }], due_dt:{ type:Date, required:true } }], }) module.exports = mongoose.model('abc',xyzSchema)
在單擊前端的檢查時,我不想將“檢查”的值從“假”更新為真。
我的路線看起來像這樣
router.put('/assignments/check', auth, async(req,res)=>{ try { let check = await Classroom.findOne( {"assignments._id":req.body.assignment_id,"assignments.submitted.user":req.body.user_id}, {$set:{"assignments.$.submitted.$.checked":"true"}}} ) res.json(check) } catch (error) { console.error(error) } })
這段代碼對我不起作用。 有人可以給我一些建議嗎? 我想要做的是 1)使用 ID 查找 Aassignment 並使用其中的用戶 ID 提交分配數組 2)將該用戶的“已檢查”值更改為“真”
您需要使用$[]
標識符。 隨着 arrayFilters 在update
。
https://docs.mongodb.com/manual/reference/operator/update/positional-filtered/#up。 S [%3Cidentifier%3E]
您還需要將您的 Id 轉換為 Mongodb object Id 與mongoose.Types.ObjectId()
如果 Ids 是 ObjectIds 有效但字段不會得到更新
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 級深度,如果更多,則需要使用arrayFilters
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.