字段操作符
$set | 赋值,省略不写。 { 姓名: "张三", 年龄: 18 } 本是 { $set: { "x.姓名": "张三", "x.年龄": 18 } } { x: $f.x } 用表单数据整体替换x 里的内容 |
$unset | 删除字段,$set的反操作。 { $unset: { 价格: "", 库存: "" } } 删除价格和库存字段 |
$inc | increment:增加指定值。 { $inc: { 价格: 1, 库存: -2 } } 价格加1,库存减2 |
$mul | multiply:乘以指定值。 { $mul: { 价格: 0.8 } } 价格打8折 |
$min | 取新旧值的最小值(当新值小于当前字段值时才更新数据)。 { $min: { 价格: 10 } } 如果原价已小于10则不更新,即最贵不超过10元。 |
$max | 取新旧值的最大值(当新值大于当前字段值时才更新数据)。 { $max: { 价格: 10 } } 如果原价已大于10则不更新,即最便宜也得10元。 |
$rename | 重命名。 { $rename: { 姓名: "x.昵称" } } 把姓名字段 改成昵称 。 |
$copy | 复制。 { $copy: { 姓名: "y.昵称" } } 新字段y.昵称 将拥有姓名 一样的值。 |
数组操作符
$push | 添加到数组末尾。 { $push: { 标签: "电器" } } :添加一个标签 { $push: { 标签: ["电器", “食品“] } } :添加多个项目 { $push: { 成绩: { 科目: "数学", 分数: 95 } } } :添加一门科目的成绩 |
$unshift | 添加到数组开头。 |
$pop | 删除数组的最后一项。 { $pop: { 成绩: "" } } |
$shift | 删除数组的第一项。 { $shift: { 成绩: "" } } |
$pull | 删除符合条件的数组元素。 { $pull: { 标签: "电器" } } 移除标签数组中的电器 { $pull: { 成绩: { 科目: "数学", 分数: { $lt: 60 } } } } 移除不及格的数学成绩 |
$sets | 更新符合条件的对象数组。 { $sets: { 成绩: [{ 科目: "数学", 分数: { $lt: 60 } }, { 分数: 60 }] } } 把所有不及格的数学成绩统一设为60分 |
* 避免同时更新同一个路径。
例如 { $inc: { 年龄: 2 }, 年龄: 0 }:后一个操作会覆盖前一个操作。
例如 { $rename: { 姓名: "x.昵称" }, 姓名: "张三" }:会报SQL错误:对同一列"x"进行了多次分配
或multiple assignments to same column "x"
。
$unset更新的是上一级路径,例如 { $unset: { 昵称: "" }, 姓名: "张三" } 也会报相同的错误,因为更新的都是x字段。