当前位置: 首页 > 知识库问答 >
问题:

HibernateOGM MongoDB聚合查询不工作与JPA setFirstResult和setMaxResult,而下一个执行

后安民
2023-03-14

我正在使用Hibernate OGM(5.2.0.Alpha1)和MongoDB(3.4)

在我行刑的时候

String query=“db.student.find({'collegeName':'VNSGU'})”

对于使用JPA setFirstResult()和setMaxResult()进行分页,它可以正常工作,但在执行聚合查询时

String query=“db.student.aggregate([{'$match':{'collegeName':'VNSGU'}])”;

List listOfStudent=entityManager。createNativeQuery(查询,Student.class)。setFirstResult(开始位置)。setMaxResults(noOfRecords)。getResultList();

执行:

>

当startPosition=0和noOfRecords=5时,它将在第一次执行时给出正确的输出,并返回5条记录,

当第二次尝试执行startPosition=5和noOfRecords=5的查询时,它将返回空列表,因为在第二次执行时,它将总共有5条记录,这是第一次执行的输出(我通过在没有setFirstResult()和setMaxResult()的情况下执行查询并返回总共5条记录来检查它)。根据,我知道早期执行的输出将成为下一次执行的输入,并将返回早期结果的结果。

但实际上发生了什么,解决办法是什么。。??

共有2个答案

魏毅
2023-03-14

根据,我知道早期执行的输出将成为下一次执行的输入,并将返回早期结果的结果。

我认为这不是问题所在。更可能发生的情况是,Hibernate OGM缓存了第一次查询的结果,并在第二次返回。这似乎与另一个问题有关:https://hibernate.atlassian.net/browse/OGM-1375

一旦我进一步调查了这个问题,我会尽快更新这个答案。

范福
2023-03-14

所以确实是个bug。

我们打开了以下问题来跟踪您报告的错误:https://hibernate.atlassian.net/browse/OGM-1411。

修复程序正在审查中,它将成为即将发布的5.3.1的一部分。最终版本。

 类似资料:
  • 在各种聚合管道阶段之后,我的第一个查询返回以下结果: 在各种聚合管道阶段之后,我的第二个查询返回以下结果: 这两个查询都在同一个集合上执行,但是根据管道阶段对数据进行不同的分组和转换。 我的两个查询都使用不同的条件,具有不同的管道阶段,包括和

  • 我有两个include文件(fill_boxMain.php和fill_boxBottom.php)。这两个都包含在my index.php中,用于按顺序填充两个div的内容。 例如: 第一个(fill_boxMain.php)工作正常。无论我如何安排或更改代码,第二个都会失败,并且会出现相同的可重复错误。i、 e.mysqli_查询($dbc,$q)失败。 选择查询在phpMyAdmin中运行良

  • >[danger] 注意!!! 使用聚合功能时,必须给它一个别名,以便能够从模型中访问它 > 聚合函数的计算,都是排除了 null 值,所以COUNT( id ) 一般推荐用非空的主键来计算 COUNT 计算数量 const { Sequelize } = app; // 查询班级总人数,按照姓名聚合 const ret = await Student.findAll({ attribut

  • 在应用中我们经常会用到一些统计数据,例如当前所有(或者满足某些条件)的用户数、所有用户的最大积分、用户的平均成绩等等,ThinkPHP为这些统计操作提供了一系列的内置方法,包括: 方法 说明 count 统计数量,参数是要统计的字段名(可选) max 获取最大值,参数是要统计的字段名(必须) min 获取最小值,参数是要统计的字段名(必须) avg 获取平均值,参数是要统计的字段名(必须) sum

  • 问题内容: 我有两种日志消息: 第一个消息是已发送消息的类型,第二个消息是确认消息已传递的消息。 它们之间的区别是后缀,我已将其与“ id”分开并可以对其进行查询。 这些消息将按以下格式解析并存储在elasticsearch中: 我想找出哪些消息已成功发送,哪些没有成功。我是Elasticsearch的初学者,所以我真的很努力。 我目前正在尝试术语聚合,但是我所能实现的就是以下代码: 向我显示已发

  • 主要内容:aggregate() 方法,管道MongoDB 中的聚合操作用来处理数据并返回计算结果,聚合操作可以将多个文档中的值组合在一起,并可对数据执行各种操作,以返回单个结果,有点类似于 SQL 语句中的 count(*)、group by 等。 aggregate() 方法 您可以使用 MongoDB 中的 aggregate() 方法来执行聚合操作,其语法格式如下: db.collection_name.aggregate(aggr