推荐答案
$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操作符只能用于更新文档中的数组字段。- 使用修饰符时,修饰符的顺序可能会影响最终结果。