【问题标题】:Getting null value while using @Query of spring data from mongo使用来自mongo的spring数据的@Query时获取空值
【发布时间】:2020-07-28 22:27:25
【问题描述】:

我一直在使用 mongorepository 和 spring 数据查询 mongodb。

我的函数如下所示:

@Repository
public interface UserRepository extends MongoRepository<User,String> {
    @Query(value="{'email' : ?0}")
    User findByEmail(String email);
}

我在 mongodb 中的收藏是这样的

> db.user.find();
{ "_id" : "1", "email" : "abc@gmail.com", "password" : "$2a$12$lDJgMZNLAcxv2J.QTZSjAuWJdPleBxXq.M4aj9itrR1RMDkgmwN7m", "name" : "def", "active" : 1, "isLoacked" : false, "isExpired" : false, "isEnabled" : true, "_class" : "com.x.gateway.auth.User" }

它总是返回空值。

【问题讨论】:

  • 您使用哪个邮箱进行查询?
  • 电子邮件:abc@gmail.com
  • 尝试使用 List 可能是 email 根本不是一个唯一字段。
  • @AbinashGhosh 你的建议有效` public interface UserRepository extends MongoRepository { //@Query(value="{'email' : ?0}") List findByEmail(String电子邮件); } `谢谢伙计。现在将尝试使该字段独一无二。如果您在 mongo 中有任何关于 db 模式标准的备忘单,请附上它,这将对本主题有很大帮助。

标签: mongodb spring-boot spring-data


【解决方案1】:

由于email 不是唯一属性,因此可以获取多个用户。所以将方法映射到List&lt;User&gt;

@Query(value="{'email' : ?0}")
List<User> findByEmail(String email);

Offical doc,您可以在这里找到更多详细信息。

【讨论】:

  • 在官方文档中6.3 Query methods 是关于不同的查询方法。
  • 如果您发现任何有用的解决方案,请尝试对其进行投票
【解决方案2】:

你为什么要使用

@Query(value="{'email' : ?0}")

因为电子邮件是直接字段(不嵌套),所以只有

User findByEmail(String email);

足够了,应该可以工作。

【讨论】:

  • @Alien :我已经评论了注释仍然没有运气
  • @AbinashGhosh : 我曾使用电子邮件 :abc@gmail.com 进行查询
  • 好的,然后检查您的数据库中只有一条与此电子邮件有关的记录 + 存储库已在服务或控制器类中正确自动装配。
猜你喜欢
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 2019-05-24
  • 1970-01-01
  • 2022-07-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多