Spring Data MongoDB 和allowDiskUse

2024-01-04

我有一个这样的查询:

db.tqaP.aggregate([
            {$match : { $and: [
                                {"eventUTCDate" : {
                                                    $gte : '01-10-2014'
                                                  }
                                }, 
                    {"eventUTCDate" : {
                                                    $lt : '31-10-2014'
                                                  }
                                }, 
                                {"mpTransactionId":{
                                                    $exists: true
                                                   }
                                },
                                {testMode : false},
                                {eventID : {
                                            $in : [
                                                    230, // ContentDiscoveredEvent
                                                    204, // ContentSLAStartEvent
                                                    211, // ContentProcessedEndEvent
                                                    255, // ContentValidationStatusEvent
                                                    256, // ContentErrorEvent
                                                    231, // ContentAnalyzedEvent
                                                    240, // ContentTranscodeStartEvent
                                                    241, // ContentTranscodeEndEvent
                                                    252  // AbortJobEvent
                                                    //205, 207
                                                  ]
                                            }
                                }
                        ]}}, 
          {$project : 
                        {
                            _id:0,
                            event : {
                                eventID                 : "$eventID",
                                eventUTCDate            : "$eventUTCDate", 
                                processState            : "$processState", 
                                jobInstanceId           : "$jobInstanceId", 
                                mpTransactionId         : "$mpTransactionId",
                                eventUID                : "$eventUID",
                                contextJobInstanceId    : "$context.jobInstanceId", 
                                contextValidationStatus : "$context.validationStatus", 
                                metaUpdateOnly          : "$metaUpdateOnly", 
                                errorCode               : "$errorCode",
                                transcodingProfileName  : "$transcodingProfileName",
                                contextAssetId          : "$context.assetId"
                            }
                        }
          },
          // Creating the hash map <mpTransactionId, listOfAssociatedEvents>
          {$group   :     {
                            "_id"               : "$event.mpTransactionId", 
                            "chainOfEvents"     : {$addToSet : "$event"}
                          },
          },
          // Sorting by chainOfEvents.eventUTCDate
          {$unwind      : "$chainOfEvents"}, 
          {$sort        : {
                            "chainOfEvents.eventUTCDate":1
                          }
          },
          {$group       : {
                            _id :"$_id", 
                            chainOfEvents: {
                                                $push:"$chainOfEvents"
                                           }
                          }
          }
       ])

运行超过 120 万条记录并终止。错误信息是

assert: command failed: {
        "errmsg" : "exception: Sort exceeded memory limit of 104857600 bytes, but did not opt in to external sorting. Aborting operation. Pass allowDi
skUse:true to opt in.",
        "code" : 16819,
        "ok" : 0
} : aggregate failed

我通过在最后一个右括号(方形和圆形)之间添加来解决此问题

,{allowDiskUsage: true}

现在我尝试使用 Spring Data for MongoDB 表达同样的事情,我的 Java 代码如下所示:

MatchOperation match = Aggregation.match( new Criteria()
                            .andOperator(
                                        Criteria.where("eventUTCDate").gte(startDateAsString),
                                        Criteria.where("eventUTCDate").lt(endDateAsString))
                            .and("mpTransactionId").exists(true)
                            .and("testMode").is(false)
                            .and("eventID").in(230, 204, 211, 255, 256, 231, 240, 241, 252) );

    ProjectionOperation projection = Aggregation.project().and("event").
                                nested(bind("eventID", "eventID").
                                        and("eventUTCDate", "eventUTCDate").
                                        and("processState", "processState").
                                        and("jobInstanceId", "jobInstanceId").
                                        and("mpTransactionId", "mpTransactionId").
                                        and("eventUID", "eventUID").
                                        and("contextJobInstanceId", "context.jobInstanceId").
                                        and("contextValidationStatus", "context.validationStatus").
                                        and("metaUpdateOnly", "metaUpdateOnly").
                                        and("errorCode", "errorCode").
                                        and("transcodingProfileName", "transcodingProfileName").
                                        and("contextAssetId", "context.assetId"));

    GroupOperation group = Aggregation.group("event.mpTransactionId").addToSet("event").as("chainOfEvents");

    UnwindOperation unwind = Aggregation.unwind("chainOfEvents");

    SortOperation sort = Aggregation.sort(Sort.Direction.ASC, "chainOfEvents.eventUTCDate");

    GroupOperation groupAgain = Aggregation.group("_id").push("chainOfEvents").as("eventsList");


    Aggregation agg = newAggregation(Event.class, match,  projection, group, unwind, sort, groupAgain).withOptions(Aggregation.newAggregationOptions().allowDiskUse(true).build());
    AggregationResults<EventsChain> results = mongoOps.aggregate(agg, "tqaP", EventsChain.class);

但我收到一组空结果。此查询适用于较小的数据集。 我刚刚添加了

.withOptions(Aggregation.newAggregationOptions().allowDiskUse(true).build());

以适应数据的大小。有人可以告诉我是否使用不正确吗?

我正在使用 MongoDB 2.6.4 和 Spring-Data-MongoDB 版本 1.6.1-RELEASE。


这是一个工作解决方案 2.1.8 使用MongoTemplate班级帮手。

AggregationOptions options = AggregationOptions.builder().allowDiskUse(true).build();
List<AggregationOperation> aggs = Arrays.asList(m1, p1, g1);
        mongoTemplate.aggregate(Aggregation.newAggregation(aggs).withOptions(options), inputCollectionName, Document.class);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Data MongoDB 和allowDiskUse 的相关文章

  • Java“空白最终字段可能尚未初始化”方法中抛出异常

    我有一些代码 例如 final int var1 if isSomethingTrue var1 123 else throwErrorMethod int var2 var1 throwErrorMethod 的定义如下 private
  • ResultSet:通过索引检索列值与通过标签检索

    使用 JDBC 时 我经常遇到这样的结构 ResultSet rs ps executeQuery while rs next int id rs getInt 1 Some other actions 我问自己 以及代码作者 为什么不使用
  • 在原子操作中测试和递减?

    我刚刚发现了一个恼人的错误 它基本上是一个竞争条件 为了便于论证 我们假设一个非常简单的文档结构 例如 id XXX amount 100 集合中存在数百个这样的文档 并且由多个编写器访问 这些编写器有效地尝试将数量降低任何值 但绝不会低于
  • 如何为java注释处理器编写自动化单元测试?

    我正在尝试使用 java 注释处理器 我可以使用 JavaCompiler 编写集成测试 事实上我现在正在使用 hickory 我可以运行编译过程并分析输出 问题 即使我的注释处理器中没有任何代码 单个测试也会运行大约半秒 对于以 TDD
  • EL 通过 Scriptlet

    在 JSP 中使用 EL 相对于 scriptlet 的优势是什么 EL 被认为是无脚本语言 EL 使 JSP 免受容易出错原始 Java 代码并强制您根据 MVC 思想编写 JSP EL 或像 JSTL 这样的标签库 不可能实现的任何事情
  • 有没有办法从 webstorm (mac) 运行 mongod

    在这个线程中 从 webstorm 运行 mongod exe https stackoverflow com questions 21068248 running mongod exe from webstorm 它指出 mongo4id
  • EMF Eclipse:带有自定义字段(属性)的枚举

    好吧 在 Java 中这是可能的 import org eclipse emf common util Enumerator public enum MyEnum implements Enumerator LITERAL1 0 Name
  • 如何在 Java 中使用 StringUtils?

    我是 Java 初学者 我想用StringUtils replace但 Eclipse 输出 StringUtils cannot be resolved I tried import java lang 但它不起作用 java lang不
  • spring mvc 跟踪引用页面

    在基于注释的弹簧控制器中 如果用户正在url com first page并点击一个链接或提交一份表格指出url com second page 如何制作second page知道url of first page所以这样second pa
  • 反应式 Spring Webflux REST 控制器内部重定向

    我正在为 spring 反应项目创建简单的控制器服务器 在设置重定向到另一个位置时 我在调用时发现错误http localhost 8080 There was an unexpected error type Internal Serve
  • MongoDB 的简单 HTTP/TCP 健康检查

    我需要为 Docker 容器内的 MongoDB 实例创建运行状况检查 尽管我可以采取解决方法并通过 CLI 使用 Mongo Ping 但最好的选择是创建一个简单的 HTTP 或 TCP 测试 标准 ping 测试中默认 27017 端口
  • 使用 JNI 从 Java 代码中检索 String 值的内存泄漏

    我使用 GetStringUTFChars 从使用 JNI 的 java 代码中检索字符串的值 并使用 ReleaseStringUTFChars 释放该字符串 当代码在 JRE 1 4 上运行时 不会出现内存泄漏 但如果相同的代码在 JR
  • bufferedinputstream 中标记读取限制有什么用

    我是Java流的新手 我想读取特定的文件内容 然后需要从头开始读取 我创建了一个 BufferedInputStream 但我对 BufferedInputStream mark int markLimit 的文档感到困惑 文档说 publ
  • Java字符串查找和替换的最佳方法?

    我正在寻找 Java 中字符串查找和替换的最佳方法 这是一句话 我的名字叫米兰 人们都知道我叫米兰瓦西奇 我想用 Milan Vasic 替换 Milan 弦 但在我已经有 Milan Vasic 的地方 情况不应该是这样 搜索 替换后的结
  • 如何在Java中模拟引用传递?

    我是一个十足的 Java 菜鸟 我知道 Java 将所有参数视为按值传递 并且还有其他几个线程人们对此进行了解释 例如 在 C 中我可以这样做 void makeAThree int n n 3 int main int myInt 4 m
  • 更新分页。是否可以?

    他们是否存在一些方法来处理更新分页 例如我有 100 行类型 Id private Integer id Column private boolean flag Column private Date last 一开始它们看起来像 id f
  • ASTParser:解析绑定后查找声明节点

    我创建了一个启用了绑定的 AST 当我稍后解析绑定时 我得到了一个有效的 ITypeBinding 但是 当我想要获取绑定的声明 Node 时 它 总是返回 null 除非 ITypeBinding 在 sourceFile 中声明 这是我
  • Retrofit 2.0:预期为 BEGIN_OBJECT,但在第 1 行第 1 列路径 $ [重复] 处为 STRING

    这个问题在这里已经有答案了 我在邮递员上传递了更新用户请求并获得了成功的响应 参见图片 现在当我尝试使用 Retrofit 2 在我的应用程序中执行相同操作时 出现错误 com google gson JsonSyntaxException
  • 获取Java中ResultSet返回的行数

    我用过一个ResultSet返回一定数量的行 我的代码是这样的 ResultSet res getData if res next System out println No Data Found while res next code t
  • Java 可变 BigInteger 类

    我正在使用 BigIntegers 进行计算 该计算使用一个调用 multiply 大约 1000 亿次的循环 并且从 BigInteger 创建新对象使其非常慢 我希望有人编写或找到了 MutableBigInteger 类 我在 jav

随机推荐

  • Rails 3.2 force_ssl(登陆页面除外)

    我想在除登陆页面之外的所有路由上强制执行 SSL 我尝试在所有控制器中设置force ssl 对于包含root的控制器 我做了 force ssl 除了 gt 索引 然而 当我将其部署到 Heroku 上的临时应用程序后 我的应用程序仍在主
  • 序列化包含 BufferedImages 的对象

    正如标题所示 我试图将一个包含 以及其他变量 字符串等 一些 BufferedImage 的对象保存到文件中 我找到了这个 如何序列化包含 BufferedImages 的对象 https stackoverflow com questio
  • 从 HTML 调用 IIFE 函数中定义的函数

    我在名为 test js 的文件中有一个 IIFE 函数 即 function mainIIFE use strict var print name function first last console log first last 我如
  • Laravel 5 路由中多个可选参数

    我在 Laravel 5 上遇到了问题 准确地说 我找不到解决方案 在 C ASP NET MVC 中 这个问题很容易解决 例如 我有这些路由 为了简单起见 我只需键入路由内容和函数头 category Page page Page pag
  • Kivy 和 Google Play 服务

    我正在尝试一种使用此方法将广告植入 Kivy 应用程序的方法example http satels blogspot ru 2013 12 work solution for kivy admob on android html 我不知道它
  • document.cookie 是否未定义?

    我只是好奇如果document cookie可以回来undefined I read 怪异模式的文章 http www quirksmode org js cookies html在饼干上 我看着 document cookie 可靠吗 h
  • MIT方案中的异常处理

    如何在 MIT 方案中引发和处理异常 类似于 它不起作用 lt val 0 raise ve value 该文档确实提供了答案 但没有代码示例 因此这里是一个 define handler x display Handling Error
  • ASP.NET Windows 身份验证

    我需要什么设置才能完成以下任务 IIS6 服务器位于 Domain1 上 用户从Domain2访问 例如Domain2 User I want WindowsIdentity ident WindowsIdentity GetCurrent
  • strings.xml 中的百分比符号

    我正在尝试格式化 string xml 中的字符串以将其与多个值一起重用 我遇到了一些问题 因为字符串还应该包含格式化程序使用的百分比符号 我已经尝试用 Unicode 表示形式替换 符号 但这似乎不起作用
  • 如果 Pandas DataFrame 列是不同长度的字符串,如何将其拆分为多个列?

    我有一个 Pandas DataFrame 它是通过使用 tabula 从 PDF 中读取表格而创建的 PDF 没有被完美解析 因此我最终将一些表列挤进了生成的 DataFrame 中的一列中 问题在于 PDF 中的表列之一是文本 因此有时
  • CSS3 背景图像放置

    我正在创建一个简单的占位符页面来宣布一个新网站 该页面仅包含 居中的背景徽标图像 该图像正下方的 流行语 我认为这很容易 我放置一个指定尺寸的定位背景图像 然后放置一个绝对定位的h1标题以获取背景图像正下方的 流行语 color white
  • Apache Spark 在内存中如何工作?

    当在 where 子句中使用非索引列查询 Cassandra 时 Spark Cassandra Connector 的官方文档 https github com datastax spark cassandra connector blo
  • pyqt QFileSystemModel rowCount

    我看过有关 QFileSystemModel rowCount 未按预期工作的帖子 ex1 https stackoverflow com questions 33544645 qfilesystemmodel rowcount does
  • document.write 是否阻塞

    我想以阻塞方式将脚本插入页面 不幸的是 无法使用脚本标记的 src 属性 如果我在所有浏览器上通过 document write 插入标签 它会阻塞吗 我知道这是一种不好的做法 但我确实需要它来阻止其他资源的加载 目前我正在做 docume
  • iOS9 - 分享到 Instagram(带钩子)不起作用

    我目前正在更新我的一款应用程序以兼容 iOS9 但在分享到 Instagram 功能时遇到问题 我正在使用 Instagram hooks 如他们的开发者网站上所述 https instagram com developer mobile
  • 重读 Lucene TokenStream 时遇到问题

    我正在使用 Lucene 4 6 并且显然不清楚如何重用 TokenStream 因为我得到了异常 java lang IllegalStateException TokenStream contract violation reset c
  • 将字符串文字添加到 static_assert

    有没有办法结合 static assert 的输出 我的意思是这样的 template
  • v4l2_buffer->timestamp值从哪里开始计数?

    我正在尝试使用 v4l2 buffer 的时间戳值 类型 timeval 来同步从UVC网络摄像头到外部事件 但是时间戳与系统时间或正常运行时间等不同 printf image captured at ld ld n buffer gt t
  • IE8和JQuery的trim()

    我正在像这样使用trim if group field val trim Where group field是文本类型的输入元素 这在 Firefox 中有效 但当我在 IE8 上尝试时 出现以下错误 Message Object does
  • Spring Data MongoDB 和allowDiskUse

    我有一个这样的查询 db tqaP aggregate match and eventUTCDate gte 01 10 2014 eventUTCDate