2

I'm struggling to insert data inside a nested array in MongoDB. My schema looks like this:

 {
        "_id" : ObjectId("5c0c55642440311ff0353846"),
        "name" : "Test",
        "email" : "[email protected]",
        "username" : "test",
        "password" : "$2a$10$RftzGtgM.DqIiaSvH4LqOO6RnLgQfLY3nk7UIAH4OAvvxo0ZMSaHu",
        "created" : ISODate("2018-12-08T23:36:04.464Z"),
        "classes" : [
                {
                        "_id" : ObjectId("5c0c556e2440311ff0353847"),
                        "cName" : "1A",
                        "student" : [
                                {
                                        "grades" : [ ],
                                        "_id" : ObjectId("5c0c55812440311ff0353848"),
                                        "name" : "StudentName",
                                        "lname" : "StudenteLastName",
                                        "gender" : "M"
                                }
                  insert                   }
        ],
        "__v" : 0
}.

What I want to do is inserting a grade for the student inside "grades" array.

Expected result is:

{
        "_id" : ObjectId("5c0c55642440311ff0353846"),
        "name" : "Test",
        "email" : "[email protected]",
        "username" : "test",
        "password" : "$2a$10$RftzGtgM.DqIiaSvH4LqOO6RnLgQfLY3nk7UIAH4OAvvxo0ZMSaHu",
        "created" : ISODate("2018-12-08T23:36:04.464Z"),
        "classes" : [
                {
                        "_id" : ObjectId("5c0c556e2440311ff0353847"),
                        "cName" : "1A",
                        "student" : [
                                {
                                        "grades" : [6],
                                        "_id" : ObjectId("5c0c55812440311ff0353848"),
                                        "name" : "StudentName",
                                        "lname" : "StudenteLastName",
                                        "gender" : "M"
                                }
                        ]
                }
        ],
        "__v" : 0
}.

I tried some queries but none of them helped me, even searching a lot.

db.teachers.update({"_id": ObjectId("5c0c55642440311ff0353846"), "classes._id": ObjectId("5c0c556e2440311ff0353847"), "classes.student._id": ObjectId("5c0c55812440311ff0353848")},{$addToSet: {"classes.$.student.grades":6}})

Basically, I searched for the student with the first curly bracket (if I do "db.teachers.find(the three conditions) the result is correct) and then add to the grades array (of Integer) the value 6. But at this point I get errors, I think I'm making a mistake on the "adding" part.

I need also to do the same thing in Mongoose. Any help is appreciated, thanks in advance!

Edit: I solved. I post my solution hoping it'll be useful to other: For pushing inside a triple nested array do:

db.teachers.update({"_id":ObjectId("5c0c59985ae5981c58937e12"),"classes":{ $elemMatch : { _id : ObjectId("5c0c59a35ae5981c58937e13") }},"classes.student": { $elemMatch : { _id : ObjectId("5c0c59aa5ae5981c58937e14")} }},{$addToSet:{"classes.$.student.0.grades":3}})

1 Answer 1

1

https://docs.mongodb.com/manual/tutorial/query-array-of-documents/

Try using $elemMatch

 "classes":{ $elemMatch : { _id : ObjectId("5c0c556e2440311ff0353847") }},
 "classes.student": { $elemMatch : { _id : ObjectId("5c0c55812440311ff0353848")} }
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.