今天要整理的Mongodb和我们使用的大部分关系型数据库区别还是很大的,他是一个文档型数据库,不是我们常说的关系型数据库的二维表,所以我们需要将我们的数据库整理一下,我们现在的数据库种类很多,但不作为今天的目标,我们今天主要整理的是文档型数据库Mongodb,在最新版的4.0之后新增了事务控制,将原来的集合锁细化到文档锁,是不是很好,所以我们今天先整理一下比较不好处理的地方,就是Map-reduce,我们来看一下,我们在关系型数据库中是什么呢?是group by,就是我们所谓的分组,只不过在文档数据库中换了一个称呼罢了,是不是没有那么神奇,其实了解关系型数据库的时候还是很好理解的,下面我们拿一个例子来说明具体的使用,
Map<String, Object> msg = Maps.newHashMap();
MatchOperation match = Aggregation.match(new Criteria("username").exists(true));
GroupOperation group = Aggregation.group("username").count().as("total");
ProjectionOperation project = Aggregation.project("total").and("_id").as("username");
Aggregation aggregation = Aggregation.newAggregation(match, group, project);
AggregationResults<MongoGroupDoc> results = mongoTemplate.aggregate(aggregation, "user_info",
MongoGroupDoc.class);
msg.put("msg", results.getMappedResults());
是不是很明显和直接,这是我们的文档设计的方式跟关系型数据库设计的方式差不多的时候,假如下面我们设计的方式是完全按照文档的方式呢,假如说我们的文档中有一个数据,这个数组里面有一些数据,我们需要按照这些数据来统计分组,怎么办呢?不要紧,Mongodb为我们提供了unwind操作,这个操作为我们提供了将文档的数组拆分的功能,假如说数组中有3个字段,那么我们就会拆分成3条数据,除了数组之外的所有字段全一样的三条数据,是不是很好理解了。因为Mongodb是无模式的文档型数据库,没有模式约定,所以我们可以根据需要将文档设计成任何我们想要的样式,但是有个前提是我们需要设计成在现有的Mongodb操作中可以灵活操作的文档。