【问题标题】:Springboot data how to make a Query correctly managing NumberLong?Spring Boot 数据如何正确管理 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 进行有效搜索吗?

【问题讨论】:

    标签: mongodb spring-boot spring-data spring-mongodb


    【解决方案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。请确认
    • 长我没有任何价值,就像长一样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 2018-05-03
    • 2014-03-19
    • 2018-07-17
    • 2020-08-24
    • 1970-01-01
    相关资源
    最近更新 更多