java - 为什么我在查询实体时没有从 MongoOperation 获得任何结果?

标签 java mongodb spring-data spring-data-mongodb

当我执行对数据库的请求时

db.users.find({"name": "Max"})

我得到了这个结果

{"_id":ObjectId("5785718ee271a7c7ebaad28b"),"name":"Max","visits-by-day":[{"day":"Thursday","visitsAmount":20},{"day":"Saturday","visitsAmount":4}]}

JSON 结构示例:

{
  "users": [
    {
      "name": "Bobby",
      "visits-by-day": [
        {
          "day": "Sunday",
          "visitsAmount": 8
        },
        {
          "day": "Monday",
          "visitsAmount": 3
        }
      ]
    }
  ]
}

这是我的 Java 代码

MongoUser user = mongoTemplate.findOne(query(where("name").is("Max")), MongoUser.class);

模型

@Document
public class MongoUser {
    @Id
    private String id;
    private String name;
    private List<VisitsPerDay> visitsByDay;
    // Getters & Setters omitted
}

public class VisitsPerDay {
    private String day;
    private Integer visitsAmount;
    // Getters & Setters omitted
}

为什么 Spring 确实返回一个 null 空而不是序列化的 Java 对象?

最佳答案

默认情况下,为给定类型查询的集合派生自您要读取的域类型的简单名称。在您的情况下,这将是 mongoUser。要让您的示例正常工作,您基本上有两种选择:

  1. MongoUser 上的 @Document 注释中的 collectionName 显式配置为 users。这将基本上将该类的实例绑定(bind)到该集合,并让该类的所有数据访问操作与该集合一起工作(例如,对于存储库等)。
  2. 调用 MongoTemplate 时,使用带有显式集合名称的 findOne(…) 的重载:

    template.findOne(query(…), MongoUser.class, "users");
    

关于java - 为什么我在查询实体时没有从 MongoOperation 获得任何结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38340348/

相关文章:

java.io.FileNotFoundException(权限被拒绝)尽管 chmod 777

java - 为什么我可以像基元一样测试包装器的不平等?我可以为我创建的类(class)执行此操作吗?

java - JPanel 的扩展类不显示 JPanel 的属性

javascript - TypeError : populate(. ..).exec 不是函数

spring-data - 如何从属性文件将字符串数组设置为@EnableJpaRepositories

java - 通过 jdbc 模板使用两个数据源

java - Spring Boot 2.2.4 - 禁用安全性

json - ObjectId 未序列化为 JSON

node.js - 如何为 MongoDB 社区版实现静态数据加密?

spring-data - 如何映射 1 :1 relationship with Spring Data R2DBC?