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

时间:2018-03-04 19:46:20

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

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

文档看起来像 {    的Fileds ...    messageUid:-3130564683773456202 }

使用springboot-data写这个long值没问题。

现在我想对这个值进行搜索,SpringBoot-data什么都不返回......

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

我直接尝试使用mongoShell 1 - 找到({messageUid:-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上进行搜索?

1 个答案:

答案 0 :(得分:0)

试试这个

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