Mongodb $set未设置嵌套值

Mongodb $set未设置嵌套值,mongodb,mongoose,Mongodb,Mongoose,我正在尝试使用findOneAndUpdate设置$set,但我的嵌套值设置不正确 下面是我的模式的一个片段: ... courseMap: { hasCourseMap: { type: Boolean, default: false }, parentMap: { type: Schema.Types.ObjectId, ref: "CourseMap" }, colleges: [ { name: { type: String }

我正在尝试使用
findOneAndUpdate
设置
$set
,但我的嵌套值设置不正确

下面是我的模式的一个片段


...

  courseMap: {
    hasCourseMap: { type: Boolean, default: false },
    parentMap: { type: Schema.Types.ObjectId, ref: "CourseMap" },
    colleges: [
      {
        name: { type: String },
        _id: { type: Schema.Types.ObjectId, ref: "College" }
      }
    ],
    title: { type: String },
    ninth: {
      hsCourses: [
        {
          courseName: { type: String, required: true },
          courseNumber: { type: String, required: true },
          _id: {
            type: Schema.Types.ObjectId,
            ref: "HighSchoolCourse",
            autopopulate: true
          }
        }
      ],
      collegeCourses: [
        {
          name: {
            type: String,
            required: true
          },
          courseNumber: { type: String, required: true },
          description: { type: String },
          courseCode: { type: String, required: true },
          _id: {
            type: Schema.Types.ObjectId,
            ref: "CollegeCourse",
            autopopulate: true
          }
        }
      ],
      skills: []
    },
    tenth: {
      hsCourses: [
        {
          courseName: { type: String, required: true },
          courseNumber: { type: String, required: true },
          _id: {
            type: Schema.Types.ObjectId,
            ref: "HighSchoolCourse",
            autopopulate: true
          }
        }
      ],
      collegeCourses: [
        {
          name: {
            type: String,
            required: true
          },
          courseNumber: { type: String, required: true },
          description: { type: String },
          courseCode: { type: String, required: true },
          _id: {
            type: Schema.Types.ObjectId,
            ref: "CollegeCourse",
            autopopulate: true
          }
        }
      ],
      skills: []
    },
    eleventh: {
      hsCourses: [
        {
          courseName: { type: String, required: true },
          courseNumber: { type: String, required: true },
          _id: {
            type: Schema.Types.ObjectId,
            ref: "HighSchoolCourse",
            autopopulate: true
          }
        }
      ],
      collegeCourses: [
        {
          name: {
            type: String,
            required: true
          },
          courseNumber: { type: String, required: true },
          description: { type: String },
          courseCode: { type: String, required: true },
          _id: {
            type: Schema.Types.ObjectId,
            ref: "CollegeCourse",
            autopopulate: true
          }
        }
      ],
      skills: []
    },
    twelfth: {
      hsCourses: [
        {
          courseName: { type: String, required: true },
          courseNumber: { type: String, required: true },
          _id: {
            type: Schema.Types.ObjectId,
            ref: "HighSchoolCourse",
            autopopulate: true
          }
        }
      ],
      collegeCourses: [
        {
          name: {
            type: String,
            required: true
          },
          courseNumber: { type: String, required: true },
          description: { type: String },
          courseCode: { type: String, required: true },
          _id: {
            type: Schema.Types.ObjectId,
            ref: "CollegeCourse",
            autopopulate: true
          }
        }
      ],
      skills: []
    },
    year5: {
      hsCourses: [
        {
          courseName: { type: String, required: true },
          courseNumber: { type: String, required: true },
          _id: {
            type: Schema.Types.ObjectId,
            ref: "HighSchoolCourse",
            autopopulate: true
          }
        }
      ],
      collegeCourses: [
        {
          name: {
            type: String,
            required: true
          },
          courseNumber: { type: String, required: true },
          description: { type: String },
          courseCode: { type: String, required: true },
          _id: {
            type: Schema.Types.ObjectId,
            ref: "CollegeCourse",
            autopopulate: true
          }
        }
      ],
      skills: []
    }
  }
...

这是我的
update
对象:

{
    "$set": {
        "courseMap": {
            "hasCourseMap": true,
            "parentMap": "5e07fb5b40b723f03935cb31",
            "colleges": [
                {
                    "_id": "5dfee8128eacd562f0338678",
                    "name": "Eastfield"
                },
                {
                    "_id": "5e06a566559c3013687cc0f1",
                    "name": "University of North Texas at Dallas"
                }
            ],
            "ninth": {
                "hsCourses": [
                    {
                        "_id": "5dfee4bb008dfb2fa4e89a43",
                        "abbr": "MATH",
                        "courseNumber": "7897987",
                        "courseName": "GEOMETRY",
                        "timestamp": "2019-12-22T03:36:27.026Z",
                        "__v": 0
                    }
                ],
                "collegeCourses": [
                    {
                        "_id": "5dfef4d75581475988759efc",
                        "HSEquivCourses": [
                            "5dfee4bb008dfb2fa4e89a43"
                        ],
                        "college": "5dfee8128eacd562f0338678",
                        "name": "test1",
                        "courseNumber": "test",
                        "description": "tesst",
                        "__v": 0
                    }
                ]
            },
            "tenth": {
                "hsCourses": [
                    {
                        "_id": "5dfee4bb008dfb2fa4e89a43",
                        "abbr": "MATH",
                        "courseNumber": "7897987",
                        "courseName": "GEOMETRY",
                        "timestamp": "2019-12-22T03:36:27.026Z",
                        "__v": 0
                    }
                ],
                "collegeCourses": [
                    {
                        "_id": "5e07dceb63b72fe4b74473e2",
                        "college": "5e06a566559c3013687cc0f1",
                        "name": "TEST",
                        "courseNumber": "tesat",
                        "description": "",
                        "courseCode": "test",
                        "__v": 0
                    }
                ]
            },
            "eleventh": {
                "hsCourses": [
                    {
                        "_id": "5dfee4bb008dfb2fa4e89a43",
                        "abbr": "MATH",
                        "courseNumber": "7897987",
                        "courseName": "GEOMETRY",
                        "timestamp": "2019-12-22T03:36:27.026Z",
                        "__v": 0
                    }
                ],
                "collegeCourses": [
                    {
                        "_id": "5dfef06ebe4ae31e7c6344bb",
                        "HSEquivCourses": [
                            "5dfee4bb008dfb2fa4e89a43"
                        ],
                        "college": "5dfee8128eacd562f0338678",
                        "name": "Psychology",
                        "courseNumber": "1301",
                        "description": "test",
                        "__v": 0
                    }
                ]
            },
            "twelfth": {
                "hsCourses": [
                    {
                        "_id": "5dfee4bb008dfb2fa4e89a43",
                        "abbr": "MATH",
                        "courseNumber": "7897987",
                        "courseName": "GEOMETRY",
                        "timestamp": "2019-12-22T03:36:27.026Z",
                        "__v": 0
                    }
                ],
                "collegeCourses": [
                    {
                        "_id": "5e07dceb63b72fe4b74473e2",
                        "college": "5e06a566559c3013687cc0f1",
                        "name": "TEST",
                        "courseNumber": "tesat",
                        "description": "",
                        "courseCode": "test",
                        "__v": 0
                    }
                ]
            },
            "year5": {
                "hsCourses": [
                    {
                        "_id": "5dfee4bb008dfb2fa4e89a43",
                        "abbr": "MATH",
                        "courseNumber": "7897987",
                        "courseName": "GEOMETRY",
                        "timestamp": "2019-12-22T03:36:27.026Z",
                        "__v": 0
                    }
                ],
                "collegeCourses": [
                    {
                        "_id": "5dfef06ebe4ae31e7c6344bb",
                        "HSEquivCourses": [
                            "5dfee4bb008dfb2fa4e89a43"
                        ],
                        "college": "5dfee8128eacd562f0338678",
                        "name": "Psychology",
                        "courseNumber": "1301",
                        "description": "test",
                        "__v": 0
                    }
                ]
            }
        }
    }
}
在使用
StudentProfile.findOneAndUpdate({u id:user.profile},update)之后

以下内容已更新,这是顶级键值,但未设置我的嵌套值

"courseMap":{
        "hasCourseMap" : true, 
        "parentMap" : ObjectId("5e07fb5b40b723f03935cb31"), 
        "colleges" : [
            {
                "_id" : ObjectId("5dfee8128eacd562f0338678"), 
                "name" : "Eastfield"
            }, 
            {
                "_id" : ObjectId("5e06a566559c3013687cc0f1"), 
                "name" : "University of North Texas at Dallas"
            }
        ], 
        "ninth" : {
            "hsCourses" : [
                {

                }
            ], 
            "collegeCourses" : [
                {

                }
            ]
        }, 
        "tenth" : {
            "hsCourses" : [
                {

                }
            ], 
            "collegeCourses" : [
                {

                }
            ]
        }, 
        "eleventh" : {
            "hsCourses" : [
                {

                }
            ], 
            "collegeCourses" : [
                {

                }
            ]
        }, 
        "twelfth" : {
            "hsCourses" : [
                {

                }
            ], 
            "collegeCourses" : [
                {

                }
            ]
        }, 
        "year5" : {
            "hsCourses" : [
                {

                }
            ], 
            "collegeCourses" : [
                {

                }
            ]
        }
    }

以下是更新前的文档片段:

...
 "courseMap" : {
        "hasCourseMap" : false, 
    }
...

您假设要将所有内容放入
$set
,这是不正确的

您可以分解更新语句

考虑以下示例,我从文档开始:

{
  a: 1,
  c: [
    "1",
    "2"
  ],
  d: [
    {
      d1: "3",
      d2: "4"
    },
    {
      d3: "5"
    }
  ],
  e: {
    e1: [
      "6",
      "7"
    ]
  },
  f: [

  ]
}
当我跑步时:

db.inserter.updateOne({

},
{
  $set: {
    c: [
      "3.3"
    ]
  },
  $push: {
    f: {
      d4: "5.5"
    }
  }
})
结果:

{
  "_id": ObjectId("5e1de4b6afa8c2dd9dcfd79c"),
  "a": 1,
  "c": [
    "3.3"
  ],
  "d": [
    {
      "d1": "3",
      "d2": "4"
    },
    {
      "d3": "5"
    }
  ],
  "e": {
    "e1": [
      "6",
      "7"
    ]
  },
  "f": [
    {
      "d4": "5.5"
    }
  ]
}
诀窍

更新文档有两个部分(可以更多,您可以使用点表示法)$set和$push

{$set:{c:[“3.3”]},$push:{f:{d4:“5.5”}

按原样运行查询时,它会处理以下输出:

{
    "_id" : ObjectId("5e1de61dafa8c2dd9dcfd79d"),
    "courseMap" : {
        "hasCourseMap" : true,
        "parentMap" : "5e07fb5b40b723f03935cb31",
        "colleges" : [
            {
                "_id" : "5dfee8128eacd562f0338678",
                "name" : "Eastfield"
            },
            {
                "_id" : "5e06a566559c3013687cc0f1",
                "name" : "University of North Texas at Dallas"
            }
        ],
        "ninth" : {
            "hsCourses" : [
                {
                    "_id" : "5dfee4bb008dfb2fa4e89a43",
                    "abbr" : "MATH",
                    "courseNumber" : "7897987",
                    "courseName" : "GEOMETRY",
                    "timestamp" : "2019-12-22T03:36:27.026Z",
                    "__v" : 0
                }
            ],
            "collegeCourses" : [
                {
                    "_id" : "5dfef4d75581475988759efc",
                    "HSEquivCourses" : [
                        "5dfee4bb008dfb2fa4e89a43"
                    ],
                    "college" : "5dfee8128eacd562f0338678",
                    "name" : "test1",
                    "courseNumber" : "test",
                    "description" : "tesst",
                    "__v" : 0
                }
            ]
        },
        "tenth" : {
            "hsCourses" : [
                {
                    "_id" : "5dfee4bb008dfb2fa4e89a43",
                    "abbr" : "MATH",
                    "courseNumber" : "7897987",
                    "courseName" : "GEOMETRY",
                    "timestamp" : "2019-12-22T03:36:27.026Z",
                    "__v" : 0
                }
            ],
            "collegeCourses" : [
                {
                    "_id" : "5e07dceb63b72fe4b74473e2",
                    "college" : "5e06a566559c3013687cc0f1",
                    "name" : "TEST",
                    "courseNumber" : "tesat",
                    "description" : "",
                    "courseCode" : "test",
                    "__v" : 0
                }
            ]
        },
        "eleventh" : {
            "hsCourses" : [
                {
                    "_id" : "5dfee4bb008dfb2fa4e89a43",
                    "abbr" : "MATH",
                    "courseNumber" : "7897987",
                    "courseName" : "GEOMETRY",
                    "timestamp" : "2019-12-22T03:36:27.026Z",
                    "__v" : 0
                }
            ],
            "collegeCourses" : [
                {
                    "_id" : "5dfef06ebe4ae31e7c6344bb",
                    "HSEquivCourses" : [
                        "5dfee4bb008dfb2fa4e89a43"
                    ],
                    "college" : "5dfee8128eacd562f0338678",
                    "name" : "Psychology",
                    "courseNumber" : "1301",
                    "description" : "test",
                    "__v" : 0
                }
            ]
        },
        "twelfth" : {
            "hsCourses" : [
                {
                    "_id" : "5dfee4bb008dfb2fa4e89a43",
                    "abbr" : "MATH",
                    "courseNumber" : "7897987",
                    "courseName" : "GEOMETRY",
                    "timestamp" : "2019-12-22T03:36:27.026Z",
                    "__v" : 0
                }
            ],
            "collegeCourses" : [
                {
                    "_id" : "5e07dceb63b72fe4b74473e2",
                    "college" : "5e06a566559c3013687cc0f1",
                    "name" : "TEST",
                    "courseNumber" : "tesat",
                    "description" : "",
                    "courseCode" : "test",
                    "__v" : 0
                }
            ]
        },
        "year5" : {
            "hsCourses" : [
                {
                    "_id" : "5dfee4bb008dfb2fa4e89a43",
                    "abbr" : "MATH",
                    "courseNumber" : "7897987",
                    "courseName" : "GEOMETRY",
                    "timestamp" : "2019-12-22T03:36:27.026Z",
                    "__v" : 0
                }
            ],
            "collegeCourses" : [
                {
                    "_id" : "5dfef06ebe4ae31e7c6344bb",
                    "HSEquivCourses" : [
                        "5dfee4bb008dfb2fa4e89a43"
                    ],
                    "college" : "5dfee8128eacd562f0338678",
                    "name" : "Psychology",
                    "courseNumber" : "1301",
                    "description" : "test",
                    "__v" : 0
                }
            ]
        }
    }
}

我用于
第九个
第十个
等的
$set
字段来自mongoose文档,我正直接尝试保存它们。我使用了
.lean()
,我的查询成功了。

在更新之前你能提供你的文档吗happens@Yahya我添加了一个relevent键的片段。您使用我在问题中发布的
update
对象运行了我的查询,并获得了输出?或者你是说你用你的技巧运行了一个查询,结果成功了?对不起,把我弄糊涂了。你的问题,没有任何改变