MongoDb连接表的查询

一、外键关联

a_table关联b_table通过a_table的a_field=b_table的b_field,在a_table生成lookup_field字段存储关联的b_table数据

MongoOperations mongoOperations = ...;
        
LookupOperation agg = Aggregation.lookup("b_table", "a_field",
                "b_field", "lookup_field");
Aggregation aggregation = Aggregation.newAggregation(agg);
List<Map> list = mongoOperations.aggregate(aggregation, "a_table", Map.class).getMappedResults();

二、内连接

a_table关联b_table通过a_table的a_field=b_table的b_field,在a_table生成lookup_field字段存储关联的b_table数据,unwind lookup_field字段

MongoOperations mongoOperations = ...;

LookupOperation agg = Aggregation.lookup("b_table", "a_field",
                "b_field", "lookup_field");
        
UnwindOperation unwindOperation = Aggregation.unwind("lookup_field");

Aggregation aggregation = Aggregation.newAggregation(agg, unwindOperation);
List<Map> list = mongoOperations.aggregate(aggregation, "a_table", Map.class).getMappedResults();

 

三、左连接

a_table关联b_table通过a_table的a_field=b_table的b_field,在a_table生成lookup_field字段存储关联的b_table数据,unwind lookup_field字段,保留null或空数组的数据

MongoOperations mongoOperations = ...;

LookupOperation agg = Aggregation.lookup("b_table", "a_field",
                "b_field", "lookup_field");

UnwindOperation unwindOperation = Aggregation.unwind("lookup_field", true);
       
Aggregation aggregation = Aggregation.newAggregation(agg, unwindOperation);
List<Map> list = mongoOperations.aggregate(aggregation, "a_table", Map.class).getMappedResults();

 

四·、左连接、提取右表第一条数据

a_table关联b_table通过a_table的a_field=b_table的b_field,在a_table生成lookup_field字段存储关联的b_table数据, unwind lookup_field字段,保留null或空数组的数据,提取第一条数据

 MongoOperations mongoOperations = ...;

LookupOperation agg = Aggregation.lookup("b_table", "a_field",
                "b_field", "lookup_field");

String arrayIndex = "index";
UnwindOperation unwindOperation = Aggregation.unwind("lookup_field", arrayIndex, true);
        
MatchOperation matchOperation = Aggregation.match(new Criteria()
                .orOperator(Criteria.where(arrayIndex).is(0), Criteria.where(arrayIndex).is(null)));
        
ProjectionOperation projectionOperation = Aggregation.project().andExclude(arrayIndex);
       
Aggregation aggregation = Aggregation.newAggregation(agg, unwindOperation, matchOperation, projectionOperation);
List<Map> list = mongoOperations.aggregate(aggregation, "a_table", Map.class).getMappedResults();

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值