Upsert是一种特殊更新操作,当找不到匹配文档时自动创建新文档,否则正常更新。通过update方法第三参数设为true实现,该操作具有原子性,能避免并发竞态问题,减少代码量,提升效率,常用于MongoDB等数据库,确保数据一致性。
Upsert 是 MongoDB 中一种特殊的更新操作:如果找不到符合条件的文档,会以查询条件和更新内容为基础直接创建一条新文档;如果找到了匹配的文档,则正常执行更新。这样一来,既不需要提前预置集合,同一套代码既能处理创建又能处理更新,非常方便。
它的语法和普通更新几乎一样,只是在后面多传一个布尔参数 true(第三个参数),告诉 MongoDB 启用 upsert 模式:
长期稳定更新的攒劲资源: >>>点此立即查看<<<
db.stu.update({"_id": 3}, {用于更新的文档内容}, true)
举个实际例子:
db.stu.update({"_id": 3}, {"$set": {"name": "wang"}}, true)
运行效果如下:

所以这个方法的适用场景很清晰:以更新条件为基准,如果查到对应数据,就更新它;如果查不到,就以这个条件为基础新增一条数据。一条命令,一举两得。
想象一下,如果没有 upsert,通常需要先查数据库,判断是否存在对应文档,再决定是更新还是插入。如果多个进程或线程同时操作同一个条件,很容易出现竞态问题——比如多个进程同时发现文档不存在,结果各自插入了一条,导致重复数据。而使用 upsert,这个操作是原子性的,既能避免竞态问题,又能减少代码量,效率也更高。
Upsert 是 MongoDB 中一个非常实用的特性,尤其适合需要“要么更新,要么插入”的场景。掌握它,能让你的数据操作更简洁、更健壮。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述