mongodb dirver for java【聚合】
发布日期:2021-05-07 04:26:39 浏览次数:23 分类:精选文章

本文共 2835 字,大约阅读时间需要 9 分钟。

环境

MongoDB:3.+

mongodb dirver for Java: 3.+
@author:喻涛

概要

本篇是翻译官网:

讲解的是用java代码对MongoDB进行聚合操作。

Aggregation Framework

聚合管道是数据聚合的框架,其实仿造数据处理管道的概念。

先决条件

test数据库中要有一个restaurants集合。

(你可以使用你本地的测试环境中的集合,来做下面的测试)

你可能需要import的声明:

import com.mongodb.Block; import com.mongodb.MongoClient; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import com.mongodb.client.model.Aggregates; import com.mongodb.client.model.Accumulators; import com.mongodb.client.model.Projections; import com.mongodb.client.model.Filters;

下面的这段代码是在教程示例中将会把查询到的结果打印出来。

Block
printBlock = new Block
() { @Override public void apply(final Document document) { System.out.println(document.toJson()); } };

连接数据库

这里我贴出我自己的代码:

//连接数据库 start            MongoCredential credential =             //根据自己的情况修改            MongoCredential.createCredential("gg_openapi",             "gg_openapi", "gg..openapi#!".toCharArray());            //根据自己的情况修改            serverAddress = new ServerAddress("106.75.51.20", 35520);            List
addrs = new ArrayList
(); addrs.add(serverAddress); List
credentials = new ArrayList
(); credentials.add(credential); @SuppressWarnings("resource") MongoClient mongoClient = new MongoClient(addrs, credentials); MongoDatabase database = mongoClient.getDatabase("gg_openapi"); System.out.println("Connect to database successfully"); //连接数据库 end

执行聚合

要执行聚合,你需要把聚合各个阶段的列表传递给MongoCollection.aggregate()方法。

java提供了Aggregates助手类,该类包含了聚合阶段的构建器。

说明:这个翻译的聚合阶段,其实就是聚合的各个管道,大概有哪些呢?我列举一些:

$project$match$group$sort$skip$limit$count

下面代码中,聚合的管道有:

①使用来进行过滤文档,下面的例子中过滤数组字段categories包含Bakery。示例中使用来构建$match管道。
②使用,通过按照字段stars来进行分组,同时,计算每组的数量。下面的示例使用的是来构建$group管道,用来构建,为了在管道中使用累加器表达式,java驱动程序提供了助手类。

collection.aggregate(      Arrays.asList(              Aggregates.match(Filters.eq("categories", "Bakery")),              Aggregates.group("$stars", Accumulators.sum("count", 1))      )).forEach(printBlock);

使用聚合表达式

对于$group 累加器表达式,java驱动程序提供了Accumulators助手类。对于其他聚合表达式,可以利用Document对象手动来构建。

下面示例中,聚合管道使用$project来只返回name字段和计算字段firstCategoryfirstCategory这个字段的值就是每个categories数组的第一个元素的值。这个例子使用Aggregates.project和各种Projections方法来构建$project阶段。

collection.aggregate(      Arrays.asList(          Aggregates.project(              Projections.fields(                    Projections.excludeId(),                    Projections.include("name"),                    Projections.computed(                    "firstCategory",                    new Document("$arrayElemAt", Arrays.asList("$categories", 0))                    )              )          )      )).forEach(printBlock);

总结

本篇教程重点介绍3.+驱动程序中提供的助手类

个人还是不建议使用。不利于对MongoDB原生知识的掌握。

上一篇:elasticsearch之x-pack破解
下一篇:mongodb dirver for java【写入操作】

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2025年04月23日 02时40分14秒