【发布时间】: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 进行有效搜索吗?
【问题讨论】:
标签: mongodb spring-boot spring-data spring-mongodb