【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!" } |


相关推荐
笔头子26 分钟前
【Caché】数据库基础操作
数据库
上火的金鱼妹28 分钟前
redis集群部署与连接
数据库·redis·缓存
程序员-Benothing42 分钟前
MySQL 二级索引有 MVCC 快照吗?
数据库·mysql
xiaoxiangsiyan1 小时前
网络智能化转型核心模块全解析
运维·服务器·网络·数据库·学习·架构·php
不才不才不不才1 小时前
Spring 源码系列(25): @EnableTransactionManagement 与 TransactionInterceptor
java·数据库·spring
l1t1 小时前
DeepSeek总结的DuckDB访谈:DuckDB的崛起、扩展与AWS收购
数据库·云计算·aws·duckdb
隔窗听雨眠1 小时前
CI/CD测试数据清理完全指南:从污染根因到三层清理覆盖的完整方案
java·数据库·ci/cd
无定义_1 小时前
Bellman-Ford——贝尔曼福特算法
数据库·算法
盟接之桥1 小时前
半导体供应链破局:EDI如何成为中国制造的数字通行证
大数据·运维·服务器·网络·数据库·人工智能·制造
其实防守也摸鱼2 小时前
ZLibrary 类项目合规避坑指南:从技术实现到法律风险的全景梳理
运维·服务器·数据库·安全·自动化·github·copilot