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

问题描述 投票:1回答:1

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

文档看起来像{fields ... message id:-3130564683773456202}

用spring boot-data写这个long值没问题。

现在我想搜索这个值,Spring Boot-data什么都不返回......

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

我已经尝试在mongo Shell中直接1 - find({message id:-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上进行搜索?

mongodb spring-boot spring-data spring-mongodb
1个回答
0
投票

试试这个

@Query("{ 'messageUid' : NumberLong(?0) }")
public Message findMessageByMessageUid( Long messageUid  );
© www.soinside.com 2019 - 2024. All rights reserved.