更新数组元素
在这一步中,你将学习如何使用位置操作符和数组过滤操作符更新 MongoDB 数组中的特定元素。
首先,确保你已进入 MongoDB shell 并使用了正确的数据库:
mongosh
use arraylab
让我们创建一个更复杂的文档,其中包含学生课程的数组:
db.students.insertOne({
name: "Bob Smith",
courses: [
{ name: "Mathematics", grade: "B" },
{ name: "Computer Science", grade: "A" },
{ name: "Physics", grade: "C" }
]
})
要更新数组中的特定元素,我们将使用位置操作符 $
。让我们更新 Computer Science 的成绩:
db.students.updateOne(
{ name: "Bob Smith", "courses.name": "Computer Science" },
{ $set: { "courses.$.grade": "A+" } }
)
让我们验证更新:
db.students.find({ name: "Bob Smith" })
示例输出:
[
{
_id: ObjectId("..."),
name: 'Bob Smith',
courses: [
{ name: 'Mathematics', grade: 'B' },
{ name: 'Computer Science', grade: 'A+' },
{ name: 'Physics', grade: 'C' }
]
}
]
我们还可以使用 $[]
操作符更新数组中的所有元素。让我们为所有课程添加一个学期:
db.students.updateOne(
{ name: "Bob Smith" },
{ $set: { "courses.$[].semester": "Fall 2023" } }
)
让我们检查最终的文档:
db.students.find({ name: "Bob Smith" })
示例输出:
[
{
_id: ObjectId("..."),
name: 'Bob Smith',
courses: [
{ name: 'Mathematics', grade: 'B', semester: 'Fall 2023' },
{ name: 'Computer Science', grade: 'A+', semester: 'Fall 2023' },
{ name: 'Physics', grade: 'C', semester: 'Fall 2023' }
]
}
]