推荐答案
$push
操作符用于向 MongoDB 文档中的数组字段添加一个新元素。如果数组字段不存在,$push
会创建该数组字段并将元素添加到其中。$push
操作符可以在更新操作中使用,通常与 update
或 updateMany
方法一起使用。
本题详细解读
1. 基本用法
$push
操作符的基本语法如下:
db.collection.update( <query>, { $push: { <field>: <value> } } )
<query>
:用于指定要更新的文档的条件。<field>
:要添加元素的数组字段。<value>
:要添加到数组中的元素。
2. 示例
假设有一个 students
集合,其中包含以下文档:
{ "_id": 1, "name": "Alice", "scores": [85, 90] }
如果我们想向 scores
数组中添加一个新分数 95
,可以使用以下命令:
db.students.update( { _id: 1 }, { $push: { scores: 95 } } )
执行后,文档将变为:
{ "_id": 1, "name": "Alice", "scores": [85, 90, 95] }
3. 高级用法
$push
操作符还支持一些修饰符,用于更复杂的操作:
$each
:用于一次添加多个元素到数组中。$slice
:用于限制数组的大小。$sort
:用于对数组进行排序。$position
:用于指定新元素插入的位置。
3.1 使用 $each
添加多个元素
db.students.update( { _id: 1 }, { $push: { scores: { $each: [95, 100] } } } )
执行后,scores
数组将变为 [85, 90, 95, 100]
。
3.2 使用 $slice
限制数组大小
db.students.update( { _id: 1 }, { $push: { scores: { $each: [95, 100], $slice: -3 } } } )
执行后,scores
数组将只保留最后三个元素 [90, 95, 100]
。
3.3 使用 $sort
对数组排序
db.students.update( { _id: 1 }, { $push: { scores: { $each: [95, 100], $sort: 1 } } } )
执行后,scores
数组将按升序排序 [85, 90, 95, 100]
。
3.4 使用 $position
指定插入位置
db.students.update( { _id: 1 }, { $push: { scores: { $each: [95], $position: 1 } } } )
执行后,scores
数组将变为 [85, 95, 90]
,95
被插入到索引为 1
的位置。
4. 注意事项
- 如果指定的字段不是数组类型,
$push
操作会失败。 $push
操作符只能用于更新文档中的数组字段。- 使用修饰符时,修饰符的顺序可能会影响最终结果。