嵌套数组中的MongoDB addToSet

时间:2018-12-08 23:47:11

标签: mongodb mongoose

我正在努力将数据插入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
}.

我想做的是在“成绩”数组中插入学生的成绩。

预期结果是:

{
        "_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({"_id":ObjectId("5c0c59985ae5981c58937e12"),"classes":{ $elemMatch : { _id : ObjectId("5c0c59a35ae5981c58937e13") }},"classes.student": { $elemMatch : { _id : ObjectId("5c0c59aa5ae5981c58937e14")} }},{$addToSet:{"classes.$.student.0.grades":3}})

1 个答案:

答案 0 :(得分:0)

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

尝试使用$ elemMatch

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