05-理解数据库更新运算符
8.4 理解数据库更新运算符
更新MongoDB数据库中的文档时,需要指定要修改哪些字段以及如何修改它们。在SQL中,使用很长的查询字符串来定义更新,而在MongoDB中,可使用简单的update对象,其中包含如何对文档中数据进行修改的运算符。
可根据需要在update对象中包含任意数量的运算符。update对象的格式类似于下面这样:
{
<operator>: {<field_operation>, <field_operation>, . . .},
<operator>: {<field_operation>, <field_operation>, . . .}
. . .
}
例如,对于下面的文档:
{
name: "myName",
countA: 0,
countB: 0,
days: ["Monday", "Wednesday"],
scores: [ {id:"test1", score:94}, {id:"test2", score:85}, {id:"test3", score:97}]
}
如果要将字段countA和countB分别加上5和1,将字段name设置为New Name,在数组字段days中添加Friday,并将数组字段scores中的元素按字段score排序,可使用下面的update对象:
{
$inc:{countA:5, countB:1},
$set:{name:"New Name"},
$push{days:"Friday},
$sort:{score:1}
}
表8.4列出了更新文档时可在update对象中指定的运算符。
| 运算符 | 描述 |
| :----- | :----- | :----- | :----- |
| $inc | 将字段值增加指定的量,格式为field:inc_value |
| $rename | 重命名字段,格式为field:new_name |
| $setOnInsert | 在更新操作中新建文档时设置字段的值,格式为field:value |
| $set | 设置既有文档的字段值,格式为field:new_value |
| $unset | 从既有文档中删除指定字段,格式为field:"" |
| $ | 充当占位符,更新与查询条件匹配的第一个元素 |
| $addToSet | 在既有数组中添加元素(如果这些元素没有包含在数组中),格式为array_field:new_value |
| $pop | 删除数组的第一个或最后一个元素。如果pop_value为-1,则删除第一个元素;如果pop_value为1,则删除最后一个元素。格式为array_field:pop_value |
| $pullAll | 从数组中删除多个值。要删除的值是以数组方式指定的。格式为array_field:[value1, value2, ...] |
| $pull | 从数组中删除与查询条件匹配的元素,其中查询条件是一个基本的查询对象,指定了字段名和匹配条件。格式为array_field:[