其他一些流程将文档插入到mongo集合中,下面是示例数据
{ "_id" : ObjectId("597b89c8da52380b04ee6948"), "_class" : "com.test.mongo", "clientId" : "CAQ123999", "isValid" : false, "isParent" : true }
{ "_id" : ObjectId("597b89c8da52380b04ee6949"), "_class" : "com.test.mongo", "clientId" : "CAQ123999", "isValid" : false, "isParent" : true }
{ "_id" : ObjectId("597b89c8da52380b04ee6950"), "_class" : "com.test.mongo", "clientId" : "CAQ123998", "isValid" : true, "isParent" : true }
{ "_id" : ObjectId("597b89c8da52380b04ee6951"), "_class" : "com.test.mongo", "clientId" : "CAQ123997", "isValid" : true, "isParent" : false }
我正在尝试使用QueryByExampleExecutor为clientId抓取一条记录。
这是我的模特
package com.test.cfp.model;
public class TFSModel {
private String clientId;
private boolean isValid;
private boolean isParent;
...
}
以下是构建示例的代码:
TFSModel tfs = new TFSModel();
tfs.setClientId(CAQ123999);
tfs.setValid(false);
tfs.setParent(true);
ExampleMatcher matcher =ExampleMatcher.matching().withIgnoreNullValues().withIgnorePaths("_id","_class");
Example<TFSModel > example = Example.of(tfs,matcher);
TFSModel oneTfsRecord = tflsRepository.findOne(example);
这不起作用,下面是生成的查询
findOne using query: { "isValid" : false , "isParent" : true , "clientId" : "CAQ123999" , "_class" : { "$in" : [ "com.test.cfp.model.TFSModel"]}} in db.collection: returns.tfs;
显然,_class与mongo集合中的包具有不同的包。如何告诉mongo在没有_class的情况下构建查询。我尝试使用IgnoredPaths并且无法正常工作。
答案 0 :(得分:1)
MongoExampleMapper
根据MappingContext
中的已知类型检查探测类型并写入类型限制。可分配给探针的类型包含在$in
运算符中。
class One {
@Id String id;
String value;
// ...
}
class Two extends One {
// ...
}
One probe = new One();
probe.value = "firefight";
Example<One> example = Example.of(probe, ExampleMatcher.matchingAny());
{
value: firefight,
_class: { $in : [ "com.example.One" , "com.example.Two" ] }
}
使用.withIgnorePaths()
无法更改此行为,因为_class
说明符不是域模型的一部分。如果您认为应该考虑这个问题,请在jira.spring.io中提交问题。
查看您提供的mongo集合中提供的示例数据,_class
属性与您的域类型不匹配,因此无法加载。