我正在使用Spring + Jersey + Mongo开发Web应用程序。我正在使用spring mongo的elemMatch获得一些特定的结果。
这是我的类,它将与mongo查询的输出进行映射。
public class ABC {
private String id;
private String dId;
private String lId;
private String hId;
private String pId;
private List<GeneralData> generalRecords;
private List<String> fhistory;
private List<String> mhistory;
private List<String> specialNotes;
}
public class GeneralData {
private Object data;
private HistoryFilter dataType;
}
现在,这就是我的数据在mongo中的样子:
{
"_id" : ObjectId("55ccda7fe4b03cc159c2ce17"),
"_class" : "com.dpdocter.collections.HistoryCollection",
"dId" : "5525ef96e4b077dfc168369b",
"lId" : "5525ef96e4b077dfc16836a1",
"hId : "5525ef96e4b077dfc16836a0",
"pId" : "55ccd9f1e4b03cc159c2ce0b",
"generalRecords" : [
{
"data" : "55ccdde7e4b03cc159c2ce18",
"dataType" : "REPORTS"
},
{
"data" : "55ccda63e4b03cc159c2ce14",
"dataType" : "CLINICAL_NOTES"
}
]
}
我希望记录基于dId,lId,hId,pId和elemMatch on generalRecords的特定数据类型(比如REPORTS)。 而且,以下是我的标准代码。
Criteria matchCriteria = Criteria.where("dId").is(dId).and("lId").is(lId).and("hId").is(hId).and("pId").is(pId).and("generalRecords.dataType").is("REPORTS");
Criteria elementMatchCriteria = Criteria.where("generalRecords").elemMatch(Criteria.where("dataType").is("REPORTS"))
BasicQuery query = new BasicQuery(matchCriteria.getCriteriaObject(), elementMatchCriteria.getCriteriaObject());
ABC abc = mongoOperations.findOne(query, ABC.class);
上述结果
ABC [id=55ccda7fe4b03cc159c2ce17, dId=null, lId=null, hId=null, pId=null, generalRecords=[GeneralData [data=55ccdde7e4b03cc159c2ce18, dataType=REPORTS]], fhistory=null, mhistory=null, specialNotes=null]
generalpcords是完美的,并且是理想的,但我只想包括dId,lId,hId,pId,fHistory,mHistory和specialNotes。我已经尝试过了:
query.fields().include('fieldName')
另外,其他一些奇怪的查询组合,但没有任何帮助。 任何人都可以提出建议。