mongoTemplate操作mongoDB,三表关联

    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;

}

版权声明:本文为hybluck原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。