当前位置:嗨网首页>书籍在线阅读

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对象中指定的运算符。

表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:[] | | $push | 在数组中添加一个元素。对于简单数组,格式为array_field:new_value;对于对象数组,格式为array_field:{field:value} | | $each | 用于运算符$push和$addToSet的限定符,用于在数组中添加多个元素。格式为array_field:{$each:[value1, ...] } | | $slice | 用于运算符$push的限定符,用于限制更新后的数组的长度。格式为array_field:{$slice: } | | $sort | 用于运算符$push的限定符,用于将数组中的文档重新排序 | | $bit | 对整数值执行按位与和或运算。格式为format:integer_field:{and: }和integer_field:{or: } |