我在“courses”内找到正确的元素来推送新的元素数组“course_content”时遇到一些困难。
我有:
{
'_id': ObjectId('65759a25ccee59d54778968e'),
'user_email': '[email protected]',
'password': 'password123',
'courses': [
{
'course_name': 'great course',
'course_info': 'Course info great course'
},
{
'course_name': 'bad course',
'course_info': 'Course info bad course'
}
]
}
我想要什么:
{
'_id': ObjectId('65759a25ccee59d54778968e'),
'user_email': '[email protected]',
'password': 'password123',
'courses': [
{
'course_name': 'great course',
'course_info': 'Course info great course'
'course_content: [{summary: "the quick brown fox",
info:"this is from a particular source"
}]
},
{
'course_name': 'bad course',
'course_info': 'Course info bad course'
}
]
}
随后,我想添加到 course_content 中,如下所示:
{
'_id': ObjectId('65759a25ccee59d54778968e'),
'user_email': '[email protected]',
'password': 'password123',
'courses': [
{
'course_name': 'great course',
'course_info': 'Course info great course'
'course_content: [{summary: "the quick brown fox",
info:"this is from a particular source"
},
{summary: "jumps over the lazy",
info:"this a great story"
},
{summary: "dogs",
info:"dogs are cool"
}]
},
{
'course_name': 'bad course',
'course_info': 'Course info bad course'
}
]
}
我能够找到我想要更新的内容。
collection.find_one(
{'_id': ObjectId(session_document_id)},
{'courses': {'$elemMatch': {'course_name': 'great course'}}}
)
但是,我无法推动它。
collection.update_one(
{'_id': ObjectId(session_document_id)},
{'courses': {'$elemMatch': {'course_name': 'great course'}}},
{'$push': {'courses.$.course_name':{summary: "the quick brown fox",
info:"this is from a particular source"
}}}
)
如有任何帮助,我们将不胜感激。
使用
arrayFilters
定位课程条目,并使用 $push
使用 $each
定位数组。
db.collection.update({
"courses.course_name": "great course"
},
{
"$push": {
"courses.$[course].course_content": {
"$each": [
{
"summary": "the quick brown fox",
"info": "this is from a particular source"
}
]
}
}
},
{
"arrayFilters": [
{
"course.course_name": "great course"
}
],
"multi": true
})