【问题标题】:Why do I not get any results from MongoOperation when querying for an entity?为什么在查询实体时没有从 MongoOperation 获得任何结果?
【发布时间】:2016-07-12 23:24:46
【问题描述】:

当我对 db 执行请求时

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 对象?

【问题讨论】:

  • 您在第一个查询中搜索“Max”并在 MongoTemplate 查询中搜索“Moshe”是否只是拼写错误?
  • 这是一个错字。
  • @Mark 你忘了加@Document(collection = "users")

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


【解决方案1】:

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

  1. MongoUserusers@Document注解中显式配置collectionName。这将基本上将该类的实例与该集合联系起来,并让该类的所有数据访问操作与该集合一起使用(例如,用于存储库等)。
  2. 当调用 MongoTemplate 时,使用带有显式集合名称的 findOne(…) 的重载:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多