spring mongodb内嵌文档查询示例。
{
"name": "zsParent",
"age": "50",
"sons": [
{
"name": "zs",
"age": "20",
"sex": "man"
},
{
"name": "lisi",
"age": "21",
"sex": "man"
},
{
"name": "wangwu",
"age": "22",
"sex": "woman"
}
]
}
代码示例
public void test() {
List<AggregationOperation> operations = new ArrayList<>();
//匹配文档
MatchOperation match = Aggregation.match(
Criteria.where("name").is("zsParent")
);
//拆分sons数组
UnwindOperation unwind = Aggregation.unwind("sons");
//二次匹配
MatchOperation match1 = Aggregation.match(Criteria.where("name").is("zs"));
operations.add(match);
operations.add(unwind);
operations.add(match1);
Aggregation aggregation = Aggregation.newAggregation(operations);
AggregationResults<JSONObject> results = mongoTemplate.aggregate(aggregation, "user", JSONObject.class);
JSONObject jsonObject = results.getUniqueMappedResult();
Son son = jsonObject.getObject("sons", Son.class);
}
简化写法
public void test() {
Aggregation aggregation = Aggregation.newAggregation(
Aggregation.match(Criteria.where("name").is("zsParent")),
Aggregation.unwind("sons"),
Aggregation.match(Criteria.where("age").gte("20").lte("21"))
);
AggregationResults<JSONObject> results = mongoTemplate.aggregate(aggregation, "user", JSONObject.class);
List<JSONObject> resultList = results.getMappedResults();
resultList.forEach(jsonObject -> {
Son son = jsonObject.getObject("sons", Son.class);
});
}