You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB中的$set操作符是什么?有哪些作用及相关$前缀操作符用法?

MongoDB $set 操作符及常见$前缀操作符说明

$set 具体作用

你的猜测完全正确,$set 是MongoDB内置的字段更新操作符,核心作用是仅更新你指定的字段,不会修改未被指定的其他字段内容。

官方定义:$set 会将指定字段的值替换为你传入的新值。如果目标字段不存在,会自动创建该字段并赋值;如果要更新嵌套文档内的字段,可以用.作为路径分隔符直接更新嵌套层级的字段,不需要整体替换整个嵌套文档。

举个实际场景示例,假设你的User集合现有一条文档:

{
  "_id": "62f1d7a9f3d4e8b7a9c1d2e3",
  "username": "test_user",
  "age": 22,
  "profile": {
    "phone": "13800000000",
    "address": "北京市朝阳区"
  }
}

如果你传入的req.body为{ age: 23, "profile.address": "上海市静安区" },执行$set: req.body后,只会修改age和profile.address两个字段,username和profile.phone的内容会完全保留。
如果不使用$set,直接把req.body作为更新参数传入,会直接把整个文档替换为req.body的内容,丢失所有未在req.body中出现的字段。


常见带$前缀的操作符使用场景

MongoDB中所有带$前缀的都是内置操作符,主要分为更新、查询、聚合三大类,常用场景如下:

更新类操作符

  • $inc:原子化增减数值字段,多用于计数场景,比如用户积分加10、商品库存减1,不需要先查询再修改,避免并发冲突,示例写法:$inc: { stock: -1, points: 10 }
  • $unset:删除文档的指定字段,示例写法:$unset: { expiredField: "" },后面的值不影响执行效果
  • $push:给数组类型字段追加一个元素,比如给用户收藏列表添加商品ID,示例写法:$push: { favorites: "prod_654321" }
  • $pull:从数组类型字段删除符合条件的元素,比如移除用户收藏列表中的指定商品ID,示例写法:$pull: { favorites: "prod_654321" }
  • $addToSet:和$push作用类似,但只有数组中不存在对应值时才会添加,避免出现重复元素

查询类操作符

  • $gt/$lt:大于/小于条件查询,比如查询年龄大于18岁的用户:{ age: { $gt: 18 } }
  • $in:匹配字段值在指定数组范围内的记录,比如查询角色为管理员或运营的用户:{ role: { $in: ["admin", "operator"] } }
  • $or:多条件或查询,满足任意一个条件即可匹配,比如查询年龄小于16岁或者所在城市为广州的用户:{ $or: [ { age: { $lt:16 } }, { city: "广州" } ] }
  • $exists:判断字段是否存在,比如查询已经绑定手机号的用户:{ "profile.phone": { $exists: true } }

额外补充:你代码中的{ new: true }参数作用是让findByIdAndUpdate方法返回更新后的最新文档,不加该参数时默认返回更新前的旧文档。

内容的提问来源于stack exchange,提问作者jethro-dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 01:54:03