MongoRepository的saveAll()是批量插入数据吗?

2024-01-05

我想让保存操作高效,所以我想偶尔向 Mongo 写入大量对象(即超过某些容量时)

Would saveAll()为我做那个吗?我应该使用BulkOperations反而?


简短的回答,是的,但前提是所有文件都是新的。如果没有,就会一一插入或更新。

看一眼SimpleMongo存储库 (Mongo存储库的默认实现):

public <S extends T> List<S> saveAll(Iterable<S> entities) {
        Assert.notNull(entities, "The given Iterable of entities not be null!");
        Streamable<S> source = Streamable.of(entities);
        boolean allNew = source.stream().allMatch((it) -> {
            return this.entityInformation.isNew(it);
        });
        if (allNew) {
            List<S> result = (List)source.stream().collect(Collectors.toList());
            return new ArrayList(this.mongoOperations.insert(result, this.entityInformation.getCollectionName()));
        } else {
            return (List)source.stream().map(this::save).collect(Collectors.toList());
        }
    }

请注意,当所有文档都是新的时,存储库将使用MongoOperations.插入方法 (Mongo模板是实施),然后,如果您查看该方法的代码,您会发现它执行批量插入:

public <T> Collection<T> insert(Collection<? extends T> batchToSave, String collectionName) {
        Assert.notNull(batchToSave, "BatchToSave must not be null!");
        Assert.notNull(collectionName, "CollectionName must not be null!");
        return this.doInsertBatch(collectionName, batchToSave, this.mongoConverter);
    }

2021 年更新:

从 spring-data-mongodb 1.9.0.RELEASE(当前为 3.2.2)开始,BulkOperations 附带了许多额外的功能。

如果除了保存一堆文档之外还需要更高级的任务,那么批量操作 https://docs.spring.io/spring-data/mongodb/docs/current/api/org/springframework/data/mongodb/core/BulkOperations.html阶级是必经之路。

它涵盖批量插入、更新和删除:

  • 插入(列表文档)
  • 删除(列表删除)
  • updateMulti(列表>更新)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MongoRepository的saveAll()是批量插入数据吗? 的相关文章

随机推荐

  • Android 中的 3D 轮播

    我正在为 Android 开发 3D Carousel 我正在用这个code http www codeproject com Articles 146145 Android 3D Carousel以下是我当前的输出 我想开发以下3D形状的
  • Word 打开 XML 邮件合并

    我正在尝试使用 Word 的 XML 来自 Word 2007 手动创建邮件合并 我有以下无效的 XML
  • 水晶报表“文件名无效。”问题

    我已经上传了我的 WebApplication 我的应用程序是在 VS2008 中使用 Crystal Reports 2008 sp3 我已经上传到并行丛服务器上 我已将水晶报表所需的所有 Dll 添加到 Bin 文件夹中 我的报告路径也
  • 错误:无法在服务器上启动调试

    我使用 Visual Studio 2010 mvc3 设计和开发了我的网站 我已从服务器复制了我的项目 编辑数据库服务器名称后 我尝试运行我的项目 但它显示错误 无法在服务器上启动调试 调试器无法连接到远程计算机 这可能是因为远程计算机未
  • Nativescript + iOS webview + 本地文件

    我目前正在开发一个简单的应用程序 该应用程序有一个使用网络视图的 HTML 部分 内容位于 app www 文件夹中 我从 home ts 组件访问它们 在 HTML 中使用类似的内容
  • Rails 4 HABTM 关联的自定义验证

    我有一个简单的场景 但我似乎找不到任何适用于 Rails 4 的建议解决方案 我只想添加一个自定义验证器来检查我的 HABTM 关联之间存储的关联数量 令我惊讶的是 说起来容易做起来容易吗 我已经寻找了一个解决方案 但最终似乎只找到了旧版本
  • 在 GitHub 的 Atom 编辑器中安装 Kite 插件

    我想试一试Kite https www kite com 这是人工智能的概念 帮助开发人员提供有关他或她当前正在编写的有用函数或表达式的提示 我已经下载了风筝原子插件 https github com kiteco plugins来自 Gi
  • php 使用 preg_match 验证字符串

    我试图在 PHP 中使用 preg match 验证输入字符串仅包含 a z A Z 0 9 字符 如果它只包含这些 则进行验证 我尝试在谷歌上搜索 但找不到任何有用的东西 有人可以帮忙吗 谢谢 使用模式 A Za z0 9 如果空字符串也
  • Ember.js ember-data resadapter 无法加载 json

    干杯 我有余烬数据存储 TravelClient Store DS Store extend revision 11 adapter DS RESTAdapter create bulkCommit false url http someI
  • 如何删除今天创建的所有记录?

    我正在处理一个非常大的数据库 600 万条记录 我今天添加了约 30 000 条不良记录 如何删除MySQL中今天创建的所有记录 它似乎created at是一个日期时间 尝试 delete from table where date cr
  • vs2015 更新 3 时 npm 安装失败并出现错误 C2373

    使用 Windows 10 重新安装我的机器后 进行设置Visual Studio 2015我在安装 git 存储库时遇到此错误 npm install在不同的项目上失败了 C Program Files nodejs node modul
  • Fortran 数组中的变量被删除?

    我有下面的代码 具有抽象类型 继承类型和一个短程序 我在其中创建一个对象并将其存储在数组中 module m implicit none type container class a allocatable item end type co
  • jQuery:禁用除当前复选框之外的所有复选框

    我有一些复选框需要以与单选按钮控件类似的方式运行 本质上 当选中一项时 所有其他项都需要取消选中 我怎样才能以尽可能少的痛苦来实现这一目标 所以总结一下 如果选中某个复选框 则必须取消选中所有其他 同级 保持单击的一个复选框不变 我已经知道
  • javascript postMessage 不工作

    我不知道该怎么办 我尝试了来自不同来源的几个示例代码 我在不同的浏览器中尝试了它们 从 Chrome 9 到 FF 4 但似乎仍然没有任何内容可以与 postMessage 功能一起使用 JS 控制台没有给我任何信息 没有一个错误 仍然没有
  • PowerShell 和 ActiveDirectory 模块 - 查找不属于特定组的用户

    上周 我第一次接触到 PowerShell 和 Active Directory 我希望能够找到非管理员与域管理员的用户列表 到目前为止 我知道如何使用以下命令 语句获取所有 ActiveDirectory 用户的所有属性 Get ADUs
  • 广义新类型推导

    Haskell 可以推导出以下实例MonadState s in T1低于但不在T2然而 这是一个非常相似的类型 我应该以什么方式修改代码T2这样的实例MonadState s可以自动导出吗 LANGUAGE GeneralizedNewt
  • Matlab 未绘制精确的傅里叶信号

    我正在尝试使用 Matlab 在傅立叶域中绘制一个简单的信号 它没有绘制正确的信号 这是我的代码 clc clear all close all x 1 0 001 10 f1 sin 2 pi 10 x f2 sin 2 pi 15 x
  • 使用 Properties.Default.Settings 时,应用程序会创建名称中带有“_”空格的文件夹

    所以情况就像 在程序集信息 对于 C Winform 应用程序 中 我这样输入 Now When I run it it creates folder with in name in place of Space Like this 它会在
  • Swift 3:无法将类型“NSMutableDictionary”的值转换为预期参数类型“[AnyHashable:Any]!”

    这段代码在 Swift 3 之前有效 诅咒你的 Swift 3 现在它显示了这个错误Flurry logEvent eventName withParameters userData line 无法将 NSMutableDictionary
  • MongoRepository的saveAll()是批量插入数据吗?

    我想让保存操作高效 所以我想偶尔向 Mongo 写入大量对象 即超过某些容量时 Would saveAll 为我做那个吗 我应该使用BulkOperations反而 简短的回答 是的 但前提是所有文件都是新的 如果没有 就会一一插入或更新