我在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})
这是行不通的,因为外壳程序将数字转换为双精度数,最后该值不完全匹配
2-查找({messageUid:NumberLong(-3130564683773456202)})
这是行不通的,因为该值太大(有一个限制,我在某处看到了该限制)
3-查找({messageUid:NumberLong(“-3130564683773456202”)})
这工作正常
所以我想知道如何用SpringBoot-data编写查询的第三版
我尝试了不同的事情
@Query("{messageUid:NumberLong(?0)}")
public Message findMessageByMessageUid( long messageUid );
=>引导时JSON Parse异常
@Query("{messageUid:NumberLong(?0)}")
public Message findMessageByMessageUid( String messageUid );
=>引导时JSON Parse异常
基本上,我们不能在@Query字符串中使用NumberLong。
我也试过
public Message findMessageByMessageUid( String messageUid );
=>不返回匹配的文档
有人可以告诉我如何使用Spring-data在NumberLong上进行有效搜索吗?
最佳答案
尝试这个
@Query("{ 'messageUid' : NumberLong(?0) }")
public Message findMessageByMessageUid( Long messageUid );