MongoDB批量写入操作

news2025/1/12 8:39:22

一、概述

MongoDB为客户端提供了批量执行写入操作的能力。批量写入操作影响单个集合。MongoDB允许应用程序确定批量写入操作所需的可接受确认级别。
db.collection.bulkWrite()方法提供了执行批量插入、更新和删除操作的能力。
MongoDB还支持通过db.collection.insertMany()方法进行批量插入。

二、有序操作与无序操作

批量写入操作可以是有序的,也可以是无序的。
通过有序的操作列表,MongoDB串行执行操作。如果在处理其中一个写入操作期间发生错误,MongoDB将返回,而不处理列表中的任何剩余写入操作。请参阅有序的批量写入
通过无序的操作列表,MongoDB可以并行执行操作,但不能保证这种行为。如果在处理其中一个写入操作期间发生错误,MongoDB将继续处理列表中的其余写入操作。请参阅无序批量写入示例。
在碎片集合上执行操作的有序列表通常比执行无序列表慢,因为对于有序列表,每个操作都必须等待前一个操作完成。
默认情况下,bulkWrite()执行有序操作。要指定无序写入操作,请在选项文档中设置ordered:false。

 三、bulkWrite() 方法

bulkWrite()支持以下写入操作:

  • insertOne
  • updateOne
  • updateMany
  • replaceOne
  • deleteOne
  • deleteMany

每个写入操作都作为数组中的文档传递给bulkWrite()。

1、例

本节中的示例使用集合:pizzas

db.pizzas.insertMany( [
{ _id: 0, type: "pepperoni", size: "small", price: 4 },
{ _id: 1, type: "cheese", size: "medium", price: 7 },
{ _id: 2, type: "vegan", size: "large", price: 8 }
] )

 下面的bulkWrite()示例在pizzas集合上运行这些操作:

  • 使用insertOne添加两个文档。
  • 使用updateOne更新文档。
  • 使用deleteOne删除文档。
  • 使用replaceOne替换文档。
try {
   db.pizzas.bulkWrite( [
      { insertOne: { document: { _id: 3, type: "beef", size: "medium", price: 6 } } },
      { insertOne: { document: { _id: 4, type: "sausage", size: "large", price: 10 } } },
      { updateOne: {
         filter: { type: "cheese" },
         update: { $set: { price: 8 } }
      } },
      { deleteOne: { filter: { type: "pepperoni"} } },
      { replaceOne: {
         filter: { type: "vegan" },
         replacement: { type: "tofu", size: "small", price: 4 }
      } }
   ] )
} catch( error ) {
   print( error )
}

 示例输出,包括已完成操作的摘要:

{
   acknowledged: true,
   insertedCount: 2,
   insertedIds: { '0': 3, '1': 4 },
   matchedCount: 2,
   modifiedCount: 2,
   deletedCount: 1,
   upsertedCount: 0,
   upsertedIds: {}
}

四、批量插入到分片集合的策略

大容量插入操作,包括初始数据插入或例程 数据导入,可能会影响分片集群性能。为 批量插入时,请考虑以下策略:

五、预拆分集合

如果分片集合为空,则该集合只有 一个首字母块,它驻留在单个分片上。 然后,MongoDB必须花时间接收数据,创建拆分和 将拆分的块分发到可用的分片。为了避免这种情况 性能成本,您可以预先拆分集合,如在分片群集中拆分块。

六、无序写入mongos

要提高分片集群的写入性能,请使用bulkWrite()可选参数设置为 。orderedfalsemongos可以尝试将写入发送到 同时使用多个分片。对于集合, 首先预先拆分集合,如在分片群集中拆分块。

七、避免单调限制

如果分片键在插入过程中单调增加,则所有 插入的数据将转到集合中的最后一个块,该块将 总是以单个分片结束。因此,插入容量 集群永远不会超过该单个分片的插入容量。

如果插入量大于单个分片可以处理的量, 如果你不能避免单调递增的分片键,那么 请考虑对应用程序进行以下修改:

  • 反转分片键的二进制位。这样可以保留 信息,并避免将插入顺序与增加相关联 值序列。
  • 交换第一个和最后一个 16 位单词以“随机播放”插入内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1358974.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

跨境电商干货!独立站流量七大来源,这些你都知道吗?

如果要问做跨境电商独立站最烧钱的地方在哪里,那肯定就是流量推广这一块了,这也是做跨境电商独立站的必修课,要给我们的独立站引流,首先必须知道独立站流量从哪里来,今天龙哥就给大家盘点独立站七大流量来源&#xff0…

This error originates from a subprocess, and is likely not a problem with pip

我遇这个问题是的原因是包名错误 注意检查包名

SSM图书管理系统完整版

1.系统开发环境 开发工具:eclipse ,SQLyog Community 数据库:mysql 8.0开发环境:jdk1.8 , tomcat 8.5后端框架:ssm 前端技术:htmlcssjavascript , layui,jquery,ajax 2.系统功能介绍…

WSL 与真实 linux 环境区别有多大?

随着 Windows 系统的不断发展和完善,WSL(Windows Subsystem for Linux)作为 Windows 10 的一个功能,为 Windows 用户提供了一个可以在 Windows 环境下运行 Linux 二进制可执行文件的环境。然而,尽管 WSL 为用户提供了一…

Charles的基础使用教程【Mac】

目录 1.安装 2.抓取https请求的前置操作 2.1安装证书: 2.2、SSL代理设置 3.Charles初识 1.安装 官网Charles下载安装即可,没有什么需要注意的地方 2.抓取https请求的前置操作 2.1安装证书: 未安装证书是这样的: 上述我们可…

南某人:从工厂到品牌的华丽转身!

南某人,这个名字在中国的市场上已经响当当,但你知道吗?这个品牌其实并没有自己的工厂和门店。那么,他们是如何做到年收入高达40亿的呢? 起初,南某人和许多中国品牌一样,从生产保暖内衣起家。然…

Golang里空结构体struct{}的介绍和使用

s t r u c t struct struct是 G o l a n g Golang Golang里的关键字,用于定义结构类型 比如 type Student struct{id intname string }struct{}是有 0 0 0个元素的结构体. struct{}{}表示类型struct{}的值为空{} 1.性质 1.1不占用内存 大小为 0 0 0,…

结合 Java Swing 实现 Java 文件和 JAR 包的拖拽执行

相关文章: 自己动手写分布式任务调度框架 之前开发了一个简易的分布式任务调度框架,任务的调度源头是通过各个业务服务的主动注册来实现的。当时有朋友提出可以添加一种任务来源,让用户能够手动将代码上传到调度平台并执行。所以在当时就“…

从《数据库索引设计与优化》看mysql索引设计

很久之前写的一篇文章,主要是结合mysql45讲和《数据库索引设计与优化》讨论索引设计的,拿出来分享下。 选用什么引擎 对于INSERT_SELECT型数据库,如果没有事务的要求,更倾向于选择MyISAM。 因为InnoDB会维护更多的数据&#xff…

Git如何将多个commit合并一个commit

问题场景:我在fork的仓库提交多个commit后,准备向原仓库提交pr,但是原仓库要求一个pr一个commit,因此需要先将这些commit合并为一个。 1.先拿到要合并的commit中最早的一个的commit id,然后进入仓库,使用如…

2024年山西省安全员C证证模拟考试题库及山西省安全员C证理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年山西省安全员C证证模拟考试题库及山西省安全员C证理论考试试题是由安全生产模拟考试一点通提供,山西省安全员C证证模拟考试题库是根据山西省安全员C证最新版教材,山西省安全员C证大纲整理…

NX二次开发中如何从对象选择控件中获得选中面的TAG值

一、概述 在NX二次开发中所有的对象操作都是通过对对象的TAG值进行操作控制,如何结合BlockUI控件,得到对象的TAG值是十分重要的一步。今天就遇到了这个问题,其实不是不会,而是思维习惯,直接利用对象选择器->Tag()&a…

杨中科 ASP.NETCore Rest

什么是Rest RPC 1、Web API两种风格: 面向过程(RPC) 、面向REST (REST) 2、RPC:“控制器/操作方法“的形式把服务器端的代码当成方法去调用。把HTTP当成传输数据的通道,不关心HTTP谓词。通过QueryString请求报文体给服务器传递数据。状态码。比如/Persons/GetAll…

[Vulnhub靶机] DriftingBlues: 3

[Vulnhub靶机] DriftingBlues: 3靶机渗透思路及方法(个人分享) 靶机下载地址: https://download.vulnhub.com/driftingblues/driftingblues3.ova 靶机地址:192.168.67.19 攻击机地址:192.168.67.3 一、信息收集 1.…

离线Vscode 安装完成后 添加到右键菜单

复制下面代码,修改文件后缀名为:reg Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\*\shell\VSCode] "Open with Code" "Icon""D:\\_Porgram_IT\\VsCode\\Code.exe"[HKEY_CLASSES_ROOT\*\shell\VSCode\comman…

GB∕T 33171-2016 城市交通运行状况评价规范

免登陆免积分下载地址 标准号:GB/T 33171-2016 中文标准名称:城市交通运行状况评价规范 英文标准名称:Specification for urban traffic performance evaluation 中国标准分类号(CCS)R85 国际标准分类号(…

告别复杂排版:Markdown语法指南

导语:Markdown作为一种轻量级的标记语言,以其简洁、易学的语法和强大的兼容性赢得了广泛的应用。本文将为您详细介绍Markdown的起源、基本语法及其在写作、博客、项目管理等场景的应用,带您领略这一简洁高效的文本编写工具的无穷魅力。 Mark…

打工人的2.0时代,只需要一副AR眼镜!

在数字化时代,工业行业中的生产效率如何得到提升?工业AR眼镜或许是一个不错的选择。不过工业AR眼镜真的可以协助员工处理工作中所遇到的各种问题吗?我们以制造业、医疗行业、船舶业的不同从业者为例: 假如你是一名制造业从业者&am…

Linux操作系统——进程控制(一) 进程创建和进程终止

进程创建 fork函数 在linux中fork函数时非常重要的函数&#xff0c;它从已存在进程中创建一个新进程。新进程为子进程&#xff0c;而原进程为父进程。 #include <unistd.h> pid_t fork(void); 返回值&#xff1a;自进程中返回0&#xff0c;父进程返回子进程id&#xff…

数据分析-25-电商用户行为可视化分析

文章目录 0. 数据代码获取1. 项目介绍1.1 分析背景1.2 分析目的1.3 分析思路 2. 数据清洗2.1 加载必要的库2.2 读取数据2.3 统计缺失值2.4 处理数据a. 删除重复值b. 转换时间格式c. 提取日期和时间d. 转换数据类型 3. 分析内容3.1 用户活跃规律a. 日均pv与uvb. 日新增pv、uv趋势…