一、外键关联

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();
                                    mongostat是mongdb自带的状态检测工具,在命令行下使用。它会间隔固定时间获取mongodb的当前运行状态,并输出。如果你发现数据库突然变慢或者有其他问题的话,你第一手的操作就考虑采用mongostat来查看mongo的状态。它的输出有以下几列:类似于MySQL的slowlog,MongoDB可以监控所有慢的以及不慢的查询。Profiler默认是关闭的,你可以选择全部开启,或者有慢查询的时候开启。查看Profile日志3个字段的意义不多说,此处有官方文档。注意,造成满查询可能是索引的问题,也可能是数据不在内存造成因此磁盘读入造成。Mongodb自带了Web控制台,默认和数据服务一同开
                                      在使用MongoDB存储数据的时候,我们查询的时候,有时候难免会需要进行连查询。但是MongoDB本身是非关系性数据库,连查询,很多时候,需要我们自己在代码里手工操作。但是从 MongoDB 3.2 版本过后,我们可以使用 lookup∗∗∗进行连查询。下面就简单介绍一下MongoDB的∗∗∗lookup∗∗∗进行连查询。下面就简单介绍一下MongoDB的∗∗∗lookup*** 进行...
resultAll = criteriaCompany;
//有条件的时候就加and
resultAll = resultAll.and(“body.advertName”).regex(this.pattern(advertName));
//最后放到matchOperation 中,等分组查询的时候作为条件
matchOperation = Aggregation.match(resultAll);
//声明一下用到的字段
projectionOperation = Ag
                                    要获取特定的字段值,请使用$in运算符。$in选择文档,其中字段的值等于指定数组中的任何值。首先让我们创建一个包含文档的集合->db.indexesDemo.createIndex({"StudentFirstName":1});{"createdCollectionAutomatically":true,"numIndexesBefore":1,"numIndexesAfter"...
                                    今天要整理的Mongodb和我们使用的大部分关系型数据库区别还是很大的,他是一个文档型数据库,不是我们常说的关系型数据库的二维,所以我们需要将我们的数据库整理一下,我们现在的数据库种类很多,但不作为今天的目标,我们今天主要整理的是文档型数据库Mongodb,在最新版的4.0之后新增了事务控制,将原来的集合锁细化到文档锁,是不是很好,所以我们今天先整理一下比较不好处理的地方,就是Map-reduc...
                                    这里写自定义目录标题由于业务字段不确定性,把mysql数据库切换成了mongodb导入依赖和数据库配置事务和其他配置使用简单查询复杂查询  使用mongoTemplate聚合使用其他分页查询总结
由于业务字段不确定性,把mysql数据库切换成了mongodb
记录一下基础的mongodb数据库基本操作
导入依赖和数据库配置
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-da
    public void specialFieldQuery() {
        Query query = new Query(Criteria.where("user").is("用户名blog"));
        // 查询一条满足条件的数据
        Map result = mongoTemplate.findOne(query, Map.class