mongodb聚合查询异常与jar包冲突解决方案

mongodb聚合查询异常与jar包冲突解决方案

想了很久,个人 觉得这个mongo查询bug和日常jar包的冲突,大家开发中一定会我一样常见,今天就这个问题写一篇自救的解决步骤,希望开发的路上能很快跳过这个坑!

Error [The ‘cursor’ option is required, except for aggregate with the explain argument]异常

2019-11-13 19:43:49,606 INFO  ys.bigdata.operation.utils.PagerUtils.queryPager(PagerUtils.java:197) - LIMIT: 21 ,INFO QUERY :Query: { "SRC_USERCODE" : "pinganyinhang02"}, Fields: { }, Sort: { "TRANDATE" : -1 , "TRADESN" : -1}
2019-11-13 19:43:49,606 INFO  ys.bigdata.operation.service.paybill.impl.PayBillServiceImpl.queryPayBill(PayBillServiceImpl.java:830) - ****************** paybill 查询集群
2019-11-13 19:43:49,715 INFO  ys.bigdata.operation.service.paybill.impl.PayBillServiceImpl.queryPayBill(PayBillServiceImpl.java:906) -  PAYBILL 查询条件:Query: { "SRC_USERCODE" : "pinganyinhang02"}, Fields: { }, Sort: { "TRANDATE" : -1 , "TRADESN" : -1}
2019-11-13 19:43:49,735 INFO  ys.bigdata.operation.service.paybill.impl.PayBillServiceImpl.payBillSum(PayBillServiceImpl.java:143) - AMOUNT QUERY Query: { "SRC_USERCODE" : "pinganyinhang02"}, Fields: null, Sort: null
2019-11-13 19:43:49,780 WARN  org.springframework.data.mongodb.core.MongoTemplate.logCommandExecutionError(MongoTemplate.java:404) - Command execution of { "aggregate" : "PAYBILL" , "pipeline" : [ { "$match" : { "SRC_USERCODE" : "pinganyinhang02"}} , { "$group" : { "_id" :  null  , "amount" : { "$sum" : "$ORDERAMOUNT"} , "total" : { "$sum" : "$SRC_FEE"} , "payeeAmount" : { "$sum" : "$PAYEE_FEE"} , "payerAmount" : { "$sum" : "$PAYER_FEE"}}}]} failed: The 'cursor' option is required, except for aggregate with the explain argument
2019-11-13 19:43:49,782 ERROR ys.bigdata.operation.service.paybill.impl.PayBillServiceImpl.queryPayBill(PayBillServiceImpl.java:120) - 查询异常:org.springframework.dao.InvalidDataAccessApiUsageException: Command execution failed:  Error [The 'cursor' option is required, except for aggregate with the explain argument], Command = { "aggregate" : "PAYBILL" , "pipeline" : [ { "$match" : { "SRC_USERCODE" : "pinganyinhang02"}} , { "$group" : { "_id" :  null  , "amount" : { "$sum" : "$ORDERAMOUNT"} , "total" : { "$sum" : "$SRC_FEE"} , "payeeAmount" : { "$sum" : "$PAYEE_FEE"} , "payerAmount" : { "$sum" : "$PAYER_FEE"}}}]}; nested exception is com.mongodb.MongoCommandException: Command failed with error 9: 'The 'cursor' option is required, except for aggregate with the explain argument' on server 10.213.32.84:50000. The full response is { "ok" : 0.0, "errmsg" : "The 'cursor' option is required, except for aggregate with the explain argument", "code" : 9, "codeName" : "FailedToParse", "operationTime" : { "$timestamp" : { "t" : 1573645422, "i" : 1 } }, "$clusterTime" : { "clusterTime" : { "$timestamp" : { "t" : 1573645422, "i" : 1 } }, "signature" : { "hash" : { "$binary" : "9RJgerlBdgPW90c3bp3uI7/Nn44=", "$type" : "00" }, "keyId" : { "$numberLong" : "6747508413606920194" } } } }

从异常字面意思,Cousor必有值或aggregate对象有值,显然我们的真正错误不是这个原因!
![在这里插入图片描述](https://img-blog.csdnimg.cn/20191114105803782.png)

用万能的百度或必应搜索发现,这个跟代码层面没有关系,是mongodb版本的
参考:[添加链接描述](https://blog.csdn.net/a1491918446/article/details/79468168)

为些我们升级 org.springframework.data 由

<dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-mongodb</artifactId>
            <version>1.9.5.RELEASE</version>
 </dependency>`

升级为:

<dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-mongodb</artifactId>
            <!--<version>1.9.5.RELEASE</version>-->
            <version>1.10.15.RELEASE</version>
 </dependency>

再启动项目,用测试demo一调用:
发现报另外一错误,方法类AnnotationUtils找不到
在这里插入图片描述

在项目中查找这个类,发现存在多个版本的,想到jar包冲突,引志找不到类的问题:
在这里插入图片描述
再细看这个类的jar包,去掉3.2.5的版本依赖
在这里插入图片描述
找到引入这个jar包的pom依赖,去掉paylib.springframework里所有jar包

<!-- hikefa core -->
        <dependency>
            <groupId>paylib.hikefa</groupId>
            <artifactId>base</artifactId>
            <version>3.0-SNAPSHOT</version>
            <exclusions>
                <exclusion>
                    <artifactId>*</artifactId>
                    <groupId>paylib.springframework</groupId>
                </exclusion>
            </exclusions>
        </dependency>

重新编译,发现3.2.5的springframework不见了

在这里插入图片描述
重启项目,调用测试demo:

在这里插入图片描述
程序调用正常,至此问题得到解决!
bug解决之后,这样一写半小时解决,其实际排查远超这个时间,所以分享一下,让大家下次遇到类似的问题,可以快速解决!

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值