public void getByLikeUserId() {
LookupOperation lookupOperation = LookupOperation.newLookup()
.from("like")
.localField("userId")
.foreignField("userId")
.as("aa");
LookupOperation lookupOperation2 = LookupOperation.newLookup()
.from("comment")
.localField("userId")
.foreignField("fromId")
.as("bb");
ProjectionOperation projectionOperation = Aggregation
.project("userId","content", "bb.contents" , "aa.nickname" );
Criteria criteria = Criteria.where("_id").is("5eeae41ef5cb8c26a28188db").and("bb.contents").is("噢");
Aggregation agg = Aggregation.newAggregation(
lookupOperation,
lookupOperation2,
//关联后的别名
Aggregation.unwind("bb"),
Aggregation.match(criteria),
//Aggregation.match(criteria2),
projectionOperation
);
//可以用Object接收,但若缺少Aggregation.unwind("aa"),nickname打印出为数组格式
//并且Object默认输出_id
List<Test> list = mongoTemplate.aggregate(agg, "publish", Test.class).getMappedResults();
for (int i = 0; i < list.size(); i++) {
System.out.print((i+1)+"\t");
System.out.println(list.get(i));
}
//打印的输出
//1 Test(_id=5eeae41ef5cb8c26a28188db, content=1, contents=噢, nickname=明天1)
}
Test类结构
@Data
@ToString
public class Test {
public String _id;
public String content;
public String contents;
public String nickname;
}