Spring Boot 数据如何正确管理 NumberLong 的查询?
Posted
技术标签:
【中文标题】Spring Boot 数据如何正确管理 NumberLong 的查询?【英文标题】:Springboot data how to make a Query correctly managing NumberLong? 【发布时间】:2018-08-12 11:18:19 【问题描述】:我在 MongoDb 中存储带有 Int64 字段的元素。我正在使用所有 bigfield 和真正的 64 位值生成一个值。
文档看起来像 归档... messageUid:-3130564683773456202
用springboot-data写这个long值没问题。
现在我想对这个值进行搜索,而 SpringBoot-data 什么也不返回...
findMessagesByMessageUid(long _messageUid) returns nothing.
findMessagesByMessageUid(Long _messageUid) returns nothing.
我直接在 mongoShell 中尝试过 1 - 查找(messageUid:-3130564683773456202) 这是行不通的,因为 shell 将数字转换为双精度值,最后值不完全匹配
2 - 查找(messageUid: NumberLong(-3130564683773456202)) 这不起作用,因为值太大(有限制,我在某处读过)
3 - find(messageUid: NumberLong("-3130564683773456202")) 这工作正常
所以我想知道如何用 SpringBoot-data 编写第三版查询
我尝试了不同的东西
@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 进行有效搜索吗?
【问题讨论】:
【参考方案1】:试试这个
@Query(" 'messageUid' : NumberLong(?0) ")
public Message findMessageByMessageUid( Long messageUid );
【讨论】:
不工作:同样的解析问题:引起:com.mongodb.util.JSONParseException: 'messageUid' : NumberLong("_param_0") ^ at com.mongodb.util.JSONParser.read( JSON.java:301) ~[mongodb-driver-3.4.3.jar:na]messageUid
数据类型是什么?
Int64数据类型
您应该在您的存储库方法中使用Long
,像这样public Message findMessageByMessageUid( Long messageUid );
从您的评论错误来看,我相信您正在使用String
。请确认
长我没有任何价值,就像长一样。以上是关于Spring Boot 数据如何正确管理 NumberLong 的查询?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Thymeleaf 在 Spring Boot 应用程序中正确缓存数据
和spring cloud/boot 学习如何管理自己的组件