Spring Boot数据如何使Query正确管理NumberLong?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot数据如何使Query正确管理NumberLong?相关的知识,希望对你有一定的参考价值。

我在MongoDb中存储带有Int64字段的元素。我正在使用所有bigfield和real 64位值生成一个值。

文档看起来像{fields ... message id:-3130564683773456202}

用spring boot-data写这个long值没问题。

现在我想搜索这个值,Spring Boot-data什么都不返回......

findMessagesByMessageUid(long _messageUid) returns nothing.
findMessagesByMessageUid(Long _messageUid) returns nothing.

我已经尝试在mongo Shell中直接1 - find({message id:-3130564683773456202})这是行不通的,因为shell将数字转换为double,最后该值不完全匹配

2 - find({messageUid:NumberLong(-3130564683773456202)})这不起作用,因为值太大(有限制,我在某处读到)

3 - find({messageUid:NumberLong(“ - 3130564683773456202”)})这个工作正常

所以我想知道如何使用SpringBoot-data编写查询的第3版

我尝试了不同的东西

@Query("{messageUid:NumberLong(?0)}")
public Message findMessageByMessageUid( long messageUid  );

=>启动时JSON解析异常

@Query("{messageUid:NumberLong(?0)}")
public Message findMessageByMessageUid( String messageUid  );

=>启动时JSON解析异常

基本上我们不能在@Query字符串中使用NumberLong。

我也试过了

public Message findMessageByMessageUid( String messageUid  );

=>不返回匹配的文档

有人能告诉我如何使用Spring-data在NumberLong上进行搜索?

答案

试试这个

@Query("{ 'messageUid' : NumberLong(?0) }")
public Message findMessageByMessageUid( Long messageUid  );

以上是关于Spring Boot数据如何使Query正确管理NumberLong?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot JPA:@Modifying @Query 没有效果

如何理解spring boot中的微服务架构的体现

如何在 Angular 6 中显示 Spring Boot Data JPA Query 的响应

如何使用 Thymeleaf 在 Spring Boot 应用程序中正确缓存数据

Spring Boot 2.x基础教程:事务管理入门

从 Spring Boot 控制器返回非 JSON 数据(对象列表)