面试题答案
一键面试- $set
- 适用场景:用于更新文档中的现有字段或添加新字段。如果字段不存在,它会创建新字段;如果字段已存在,则更新其值。
- 应用实例:假设我们有一个集合
students
,文档结构为{name: "John", age: 20}
,要更新age
字段并添加grade
字段,可以这样操作:
db.students.updateOne( {name: "John"}, {$set: {age: 21, grade: "A"}} );
- $inc
- 适用场景:专门用于对文档中的数值类型字段进行增加或减少操作。适用于需要在现有数值基础上进行增减的场景,比如计数器。
- 应用实例:在
students
集合中,有一个文档{name: "Jane", score: 80}
,要给score
字段增加10分:
db.students.updateOne( {name: "Jane"}, {$inc: {score: 10}} );
- $push
- 适用场景:向文档中的数组类型字段添加一个或多个元素。如果数组字段不存在,它会创建一个新的数组字段。常用于需要向列表类型数据中添加元素的场景。
- 应用实例:假设
students
集合中有文档{name: "Bob", hobbies: ["reading"]}
,要向hobbies
数组中添加"swimming"
:
db.students.updateOne( {name: "Bob"}, {$push: {hobbies: "swimming"}} );
- $pull
- 适用场景:从文档中的数组类型字段中删除一个或多个匹配的元素。适用于需要从列表类型数据中移除元素的场景。
- 应用实例:还是在
students
集合中,文档{name: "Bob", hobbies: ["reading", "swimming"]}
,要移除"swimming"
:
db.students.updateOne( {name: "Bob"}, {$pull: {hobbies: "swimming"}} );
- $unset
- 适用场景:用于删除文档中的字段。如果字段不存在,操作不会报错,但也不会有实际效果。适用于当某个字段不再需要时,将其从文档中移除。
- 应用实例:在
students
集合中,文档{name: "Alice", age: 22, gender: "female"}
,要删除gender
字段:
db.students.updateOne( {name: "Alice"}, {$unset: {gender: ""}} );