执行 MongoTemplate.aggregate 而不进行行检索

2024-01-25

我正在使用 Spring Mongo 驱动程序来执行一个将运行一段时间的大型 mongo 聚合语句。此聚合的输出阶段将聚合的输出写入新的集合中。我永远不需要在内存中检索此聚合的结果。

当我在 Spring boot 中运行此程序时,JVM 在进行行检索时内存不足,尽管我没有使用或存储任何结果。

有没有办法使用 MongoTemplate.aggregate 跳过行检索?

Ex:

mongoTemplate.aggregate(Aggregation.newAggregation(
   Aggregation.sort(new Sort(new Sort.Order(Sort.Direction.DESC, "createdOn"))),

   Aggregation.group("accountId")
      .first("bal").as("bal")
      .first("timestamp").as("effectiveTimestamp"),

   Aggregation.project("_id", "effectiveTimestamp")
                        .andExpression("trunc(bal * 10000 + 0.5) / 100").as("bal"),

   aggregationOperationContext -> new Document("$addFields", new Document("history",Arrays.asList(historyObj))),

   // Write results out to a new collection - Do not store in memory
   Aggregation.out("newBalance")
).withOptions(Aggregation.newAggregationOptions().allowDiskUse(true).build()),
   "account", Object.class
);

使用聚合选项 -skipOutput()。如果聚合管道包含 $out/$merge 操作,这将不会返回结果。

mongoTemplate.aggregate(aggregation.withOptions(newAggregationOptions().skipOutput().allowDiskUse(true).build()), "collectionNme", EntityClass.class);

如果您使用没有框架的 MongoDriver。

MongoClient client = MongoClients.create("mongodb://localhost:27017");
 MongoDatabase database = client.getDatabase("my-collection");
 MongoCollection<Document> model = database.getCollection(collectionName);
 AggregateIterable<Document> aggregateResult = model.aggregate(bsonListOfAggregationPipeline);
 
 // instead iterating over call toCollection() to skipResult
 aggregateIterable.toCollection();

参考:

  • https://jira.mongodb.org/browse/JAVA-3700 https://jira.mongodb.org/browse/JAVA-3700
  • https://developer.mongodb.com/community/forums/t/mongo-java-driver-out-fails-in-lastpipelinestage-when-aggregate/9784 https://developer.mongodb.com/community/forums/t/mongo-java-driver-out-fails-in-lastpipelinestage-when-aggregate/9784
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

执行 MongoTemplate.aggregate 而不进行行检索 的相关文章

随机推荐

  • 在Android中使用notifyItemRemoved或notifyDataSetChanged与RecyclerView

    我正在创建一个要使用 RecyclerView 显示的卡片列表 其中每张卡片都有一个用于从列表中删除该卡片的按钮 当我使用通知项目已删除 要删除 RecyclerView 中的卡片 它会删除该项目并进行良好的动画处理 但列表中的数据未正确更
  • 在 PyYAML 中格式化自定义类输出

    我正在这里研究一个简单的示例 但文档仍然让我有点困惑 这是示例代码 class A yaml YAMLObject yaml tag u A def init self val self val val if name main t dat
  • XamlParseException:自定义控件中的属性丢失,但已定义!

    I 有时我的自定义控件出现以下异常 XamlParseException occurred Unknown attribute Points in element SectionClickableArea Line 10 Position
  • 将 MariaDB 与实体框架结合使用

    最近 我读到一则新闻 说 MariaDB 是 MySQL 的替代品 因为MySQL 对集群 企业版的定价不友好 http www theregister co uk 2013 09 12 google mariadb mysql migra
  • Node X-ray 从 url 集合中爬取数据

    我正在尝试在网站中抓取一个列表 该列表会指向具有相同格式的其他页面 我能够创建所有 a 标签的集合 但是当我尝试访问页面集合时 我尝试用它创建的密钥不会添加到返回的对象中 这是我尝试对堆栈溢出执行的操作的示例 var Xray requir
  • 如何在 Mac 操作系统上永久删除 Xampp?

    我用过Xampp 然后把它删除了 然后 我尝试使用Mamp 有一个错误我不明白 Mamp 作为网络服务器运行得非常完美 但是如果我想使用phpmyadmin 它就不起作用了 例如 我向数据库插入一些内容 它没有显示在 phpmyadmin
  • 多语言数据库,具有默认后备

    我知道 我有一个问题已经被广泛讨论 但在我看来 有一个方面仍然需要澄清 我正在创建一个带有多语言数据库的网络应用程序 我已经找到了一些好的实践文章 例如this https web archive org web 2014101519585
  • 关闭/重启Linux系统的shell脚本

    有没有合适的 shell 脚本来关闭或重新启动 Linux 机器 我尝试过使用 shell 脚本来关闭 但是当我输入sudo shutdown它会要求输入密码 我们如何使用脚本输入密码 我认为另一种更干净的方法 在中创建一个新文件 etc
  • Javascript 中的 Unicode 值 \uXXXX 到字符

    我以前从未这样做过 并且不确定为什么它会输出臭名昭著的内容 编码字符 关于如何输出应有的字符 ASCII Unicode 有什么想法吗 我认为 u0041 u005A应该打印A ZFirefox 报告的 UTF 8 是页面编码 var c
  • 读取文本文件时字符串索引超出范围[重复]

    这个问题在这里已经有答案了 我一直在程序的倒数第二行遇到此错误 我不知道为什么 我所做的只是从文本文件中读取一行 if items 0 86947367 with open read it txt as text file try pric
  • 如何设置组合框中选定的值?

    我在 C Windows 窗体中使用组合框 我绑定的项目列表如下 var employmentStatus new BindingList
  • 创建一个没有 init 方法的类 (Objective-c)

    是否可以创建一个没有 init 方法的类 以强制所有调用者使用工厂方法创建对象 所以基本上 您要确保您的类永远不会使用 init 进行初始化 对吧 你不能这样做exactly你想做的事 但你可以接近 由于您继承自 NSObject 因此您有
  • Android ICS 仿真相机

    我正在尝试使用模拟器查看 ICS 中的 Gallery 应用程序 因此 我启动 AVD 并用相机拍摄几张照片 然后启动图库 当我单击图库中的任何集合时 我收到错误消息 不幸的是 相机已停止 图库应用程序退出 我已经在 Mac 和 Windo
  • java :使用 vfs s3 插件在 Amazon S3 中使用服务器端加密

    为了在 S3 中复制文件 我正在使用vfs s3 2 2 1 jar我发现S3文件对象班级下com intridea io vfs provider s3包裹 我正在其中使用public void copyFrom final FileOb
  • 使用 dplyr 和 SQLite 进行 UTF-8 编码

    我在 SQLite 中有一个表 我想用 dplyr 打开它 我在装有 Win 7 的 PC 上使用 SQLite Expert 版本 35 58 2478 R Studio 版本 0 98 1062 使用 src sqlite 连接到数据库
  • 当 SQL 中的值为空时,如何在 INSERT 上跳过列条目?

    我正在向数据库中插入大量行 但某些列是空白的对于某些行 如何插入而不为这些空白字段分配虚拟值 1 INSERT Leads VALUES name cityName 5 anotherValue 2 INSERT Leads VALUES
  • 用tidesdk制作一个可拖动的透明窗口

    使用TideSDK 如何拥有一个没有Windows风格边框的窗口 并保持可拖动 我尝试两件事 首先像这样配置我的 tiapp xml
  • 在 PowerShell 中使用管道连接的 ffmpeg 和 ffplay

    我已将当前的视频项目从命令提示符切换到 PowerShell 以便我可以充分利用Tee Object对于多输出代码 目前 我有一个批量运行的代码版本 但我需要通过 T 恤添加一项功能 这是我第一次使用 PowerShell 所以这可能是一个
  • 非 void 接口代码契约的实现 - default(T) 与 throw NotImplementedException

    这可能主要是一个风格问题 但是在为非 void 接口成员定义代码契约时 哪种方法最好 界面 ContractClass typeof IFooContract public interface IFoo object Bar 合同选项1 C
  • 执行 MongoTemplate.aggregate 而不进行行检索

    我正在使用 Spring Mongo 驱动程序来执行一个将运行一段时间的大型 mongo 聚合语句 此聚合的输出阶段将聚合的输出写入新的集合中 我永远不需要在内存中检索此聚合的结果 当我在 Spring boot 中运行此程序时 JVM 在