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
对象运行了我的查询,并获得了输出?或者你是说你用你的技巧运行了一个查询,结果成功了?对不起,把我弄糊涂了。你的问题,没有任何改变