使用mongoTemplate 实现java
实体类
public class RuleEntity implements Serializable {
private String id;
private String productId;
private String createDate;
private List<RuleInnerEntity> value;
public static class RuleInnerEntity {
private String id;
private String name;
private String title;
private List state;
private List view;
private List edit;
private Object content;
private List value;
}
查询条件: productId=“442748804735971328” 和内嵌文档 state =“04” ,并且不返回 内嵌文档的content 字段;
momgo sql语句可以正常实现
db.scf_template_rule.aggregate([
{"$unwind":"$value"},
{"$match":{productId:"442748804735971328","value.state":"04"}},
{"$group":{"_id":"$_id","productId":{"$first":"$productId"},"value":{"$push":"$value"}}},
{"$project":{"value.content":0}}
])
java 代码:
public List<RuleEntity> selectRuleStateById(String productId, String state){
Aggregation aggre = Aggregation.newAggregation(
Aggregation.unwind("value"),
Aggregation.match(Criteria.where("productId").is(productId).and("value.state").is(state).and("value.view").is("supplier")),
//分组后没有参与筛选的字段会丢失,使用first,匹配第一次查到的字段
Aggregation.group("_id").push("value").as("value").first("productId").as("productId").first("createDate").as("createDate")
);
AggregationResults<RuleEntity> aggregate = mongoTemplate.aggregate(aggre, COLLECTIOIN_NAME_RULE, RuleEntity.class);
return aggregate.getMappedResults();
java 前边条件都实现了,就是返回字段不需要Content,无法实现. 这个该怎么写?