1 问题描述
在Spring Boot
中使用Mongodb
中的Example
查询数据时查询不到,示例代码如下:
ExampleMatcher matcher = ExampleMatcher.matching()
.withMatcher("username", ExampleMatcher.GenericPropertyMatchers.exact())
.withIgnorePaths("id","password");
2 问题分析
在Spring Data
中使用Mongodb
时,插入数据会添加一个_class
字段,这个字段是用来映射POJO
的,也就是说,如果一个实体类如下:
@Document(collection = "user")
class User{
@Id
private String id;
private String username;
private String password;
}
则存进数据库的字段如下:
_id,_class,username,password
而使用ExampleMatcher
,默认情况下会匹配所有字段,因此,如果实体类的包名改变了,_class
字段就不会匹配,这样就无法正确地得到查询结果。
3 解决方案
把_class
添加进IgnorePath
即可:
.withIgnorePaths("_class","id","password")
如果不想在插入数据时自动添加_class
字段,可以修改MongoTemplate
或者MappingMongoConverter
,由于此超出本文范围,仅给出参考链接,戳这里或这里。