嵌套数组中的MongoDB addToSet

嵌套数组中的MongoDB addToSet,mongodb,mongoose,Mongodb,Mongoose,我正在努力在MongoDB中的嵌套数组中插入数据。 我的模式如下所示: { "_id" : ObjectId("5c0c55642440311ff0353846"), "name" : "Test", "email" : "test@gmail.com", "username" : "test", "password" : "$2a$10$RftzGtgM.DqIiaSvH4LqOO6RnLgQfLY3nk7UIA

我正在努力在MongoDB中的嵌套数组中插入数据。 我的模式如下所示:

 {
        "_id" : ObjectId("5c0c55642440311ff0353846"),
        "name" : "Test",
        "email" : "test@gmail.com",
        "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
}.
我想做的是在“grades”数组中插入学生的分数

预期结果是:

{
        "_id" : ObjectId("5c0c55642440311ff0353846"),
        "name" : "Test",
        "email" : "test@gmail.com",
        "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
}.
我尝试了一些查询,但没有一个对我有帮助,甚至搜索了很多

db.teachers.update({"_id": ObjectId("5c0c55642440311ff0353846"), "classes._id": ObjectId("5c0c556e2440311ff0353847"), "classes.student._id": ObjectId("5c0c55812440311ff0353848")},{$addToSet: {"classes.$.student.grades":6}})
基本上,我用第一个花括号搜索学生(如果我使用“db.teachers.find”(三个条件)结果是正确的),然后将值6添加到成绩数组(整型)。但在这一点上我得到了错误,我认为我在“添加”部分犯了错误

我也需要在猫鼬身上做同样的事情。 感谢您的帮助,提前谢谢

编辑:我解决了。我发布了我的解决方案,希望它对其他人有用: 要在三重嵌套数组中推入,请执行以下操作:

db.teachers.update({u id:ObjectId(“5C0C559985AE5981C58937E12”),“classes:{$elemMatch:{u id:ObjectId(“5C0C559A35AE5981C58937E13”)},classes.student:{$elemMatch:{u id:ObjectId(“5C0C559AA5AE5981C58937E14”)}},{$addToSet:{“classes.$.student.0.grades”:3})

尝试使用$elemMatch

 "classes":{ $elemMatch : { _id : ObjectId("5c0c556e2440311ff0353847") }},
 "classes.student": { $elemMatch : { _id : ObjectId("5c0c55812440311ff0353848")} }