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


相关推荐
jaysee-sjc21 分钟前
【苍穹外卖】Day12:工作台数据看板与 Excel 报表导出
java·开发语言·数据库·spring boot·spring·微信·excel
sunburn-40 分钟前
数据库聚合查询完整教程:从基础函数到实战统计
java·数据库·mysql·数据库开发
小蒜学长1 小时前
基于 Spring Boot 的英语单词背诵系统的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端
中电金信1 小时前
开发更高效、监控更实时、运维更省心,源启数据开发平台构筑一站式数据开发新底座
网络·数据库·人工智能
泡海椒1 小时前
深度解析JQuick-SQL 谓词下推与投影下推优化机制
数据库·sql
❀͜͡傀儡师2 小时前
MySQL REST Service 认证鉴权体系与 MySQL 26.10.0 内置化演进
数据库·mysql·adb
wifi___2 小时前
Redis分布式锁
数据库·redis·分布式
4SAPI2 小时前
营销内容生成大模型 API 生产选型指南:4SAPI、硅基流动与 OpenRouter 的架构权衡
数据库·人工智能·架构·php
zyxqyy&∞2 小时前
sqli-labs-union联合查询(Less1-Less4)
数据库·安全
数据库小学妹3 小时前
MySQL binlog格式怎么选?ROW、STATEMENT、MIXED的区别与坑
数据库·mysql·binlog·主从复制·数据一致性