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

时间:2016-07-12 23:24:46

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

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

1 个答案:

答案 0 :(得分:2)

默认情况下,查询给定类型的集合是从您要读取的域类型的简单名称派生的。在您的情况下,那将是Bitmap bmp = BitmapFactory.decodeByteArray(result, 0, bytesRead); 。为了让你的例子有效,你基本上有两个选择:

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

    MongoTemplate