【sql】MongoDB 新增 高级用法

【sql】MongoDB 新增 高级用法




批量插入数据, 遇到错误跳过并继续执行


方案一

ordered:false

使用场景:

1: 数据存在时则跳过插入

//批量插入

db.res_phone.insertMany(

[

{"_id":1, "phone":10086},

{"_id":2, "phone":10010},

{"_id":3, "phone":10000},

],

{

//遇到错误是否中断 false遇到错误会跳过 继续执行

ordered:false

}

);


方案二

update里有个参数 'setOnInsert' 可以实现"存在则不执行"的功能,可见 setOnInsert 官方文档。

示例:

起始数据:

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| > db.Blog.``insert``({``"_id"``:``"123456"``, ``"blog_cont"``:``"abcdef"``, ``"title"``:``"《My Test》"``}) > db.Blog.find() { ``"_id" : ``"123456"``, ``"blog_cont" : ``"abcdef"``, ``"title" : ``"《My Test》" } |

加入相同 ID 的日志:

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| > db.Blog.``update``({``"_id"``:``"123456"``}, {$setOnInsert:{``"blog_cont"``:``"abc123"``, ``"other"``:``"hello world!"``}}, {upsert:``true``}) WriteResult({ ``"nMatched" : 1, ``"nUpserted" : 0, ``"nModified" : 0 }) > > db.Blog.find() { ``"_id" : ``"123456"``, ``"blog_cont" : ``"abcdef"``, ``"title" : ``"《My Test》" } |

加入不同 ID 的日志:

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| > db.Blog.``update``({``"_id"``:``"123"``}, {$setOnInsert:{``"blog_cont"``:``"abc123"``, ``"other"``:``"hello world!"``}}, {upsert:``true``}) WriteResult({ ``"nMatched" : 0, ``"nUpserted" : 1, ``"nModified" : 0, ``"_id" : ``"123" }) > > db.Blog.find() { ``"_id" : ``"123456"``, ``"blog_cont" : ``"abcdef"``, ``"title" : ``"《My Test》" { ``"_id" : ``"123"``, ``"blog_cont" : ``"abc123"``, ``"other" : ``"hello world!" } |

如果某些内容想更新的话(例如更新 title )可以用 '$set':

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| > db.Blog.``update``({``"_id"``:``"123456"``}, {$setOnInsert:{``"blog_cont"``:``"abc123"``, ``"other"``:``"hello world!"``}, $``set``:{``"title"``:``"《New Title》"``}}, {upsert:``true``}) WriteResult({ ``"nMatched" : 1, ``"nUpserted" : 0, ``"nModified" : 1 }) > > db.Blog.find() { ``"_id" : ``"123456"``, ``"blog_cont" : ``"abcdef"``, ``"title" : ``"《New Title》 { "``_id``" : "``123``", "``blog_cont``" : "``abc123``", "``other``" : "``hello world!" } |


相关推荐
Shadow(⊙o⊙)1 分钟前
表的增删查改
数据库·mysql
步行cgn8 分钟前
Spring 负责注入的注解详解
java·sql·spring
+VX:Fegn08951 小时前
计算机毕业设计|基于springboot + vue外卖点餐系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
盟接之桥2 小时前
线束数字化--先进先出为什么总是停留在纸面上?
大数据·网络·数据库·人工智能·制造·ai编程
adinnet20263 小时前
预算管控:预算执行与偏差问数
大数据·数据库
Omics Pro4 小时前
Cell封面|衰老生物学开源AI工具包
数据库·人工智能·算法·机器学习·自然语言处理
IT枫斗者枫哥12 小时前
MyBatis一对多分页:LIMIT 20,为什么凑不齐20个订单?
java·数据库
Y0012 小时前
PostgreSQL 的锁:为什么你的 ALTER TABLE 会卡住,以及怎么查
数据库·postgresql
灰原喜欢柯南12 小时前
OceanBase 运维管理知识点——OCP 监控、诊断与变更控制
数据库·oceanbase
码农-00412 小时前
Springboot 集成 Ehcache操作数据库显示SQL语句设置
数据库·spring boot·sql