We are looking for a user in the database by '_id'
"_id": "6381e7c6bf8892cf05c7c798",
"username": "Teacher",
"email": "[email protected]",
"role": "teacher",
"avatar": "fixtures/teacher.jpg",
"token": "KNuSF7sscU3EJsMetUFKi",
"authentication": true,
"myCourses"
and
It is necessary to get a suitable object from the array using 'aggregate'
, which we find by the 'course'
field and change the 'status'
in it
"myCourses": [
{
"course": "6381e7c6bf8892cf05c7c7b3",
"status": true,
"_id": "6381e80f12d633b2e6c35fbd"
},
{
"course": "6381edab4f212193837ab575",
"status": true,
"_id": "6381edc54f212193837ab57c"
}
],
I have tried the following methods
const test = await User.find({ _id: userId, myCourses: {$elemMatch: {course: courseId}} })
const test = await User.find(userId, { courseId: {$in : myCourses} })
const updateCourseStatus = user.myCourses.find(elem => elem.course.toString() === courseId)
the last method works but I don’t think it’s correct
2
Answers
If you want to update in myCourses course status.
Filter the document by
_id
and also the course you want to update bycourseId
.Use pointer operator
$
to set value in pointed object property.Read the documentation here
Try sample
example
Another option to change
"status"
given"myCourses.course"
using"arrayFilters"
is:Try it on mongoplayground.net.