我在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  );

09-26 11:21