因业务需要所以需要对mongoDB客户端jar包升级,在此记录一些过程

1、jar包替换,引入依赖

3.2.2: mongo-java-driver     |     4.6.1: mongo-driver-sync
        <dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-sync</artifactId>
<version>4.6.1</version>
</dependency>
2、创建mongoclient和数据库
1)连接设置
①使用SCRAM-SHA-256或SCRAM-SHA-1的认证方式,其中SCRAM-SHA-256为默认的认证方式
MongoCredential credential = MongoCredential.createScramSha256Credential("<username>", "<authenticationDb>", "<password>");
MongoCredential credential = MongoCredential.createScramSha1Credential("<username>", "<authenticationDb>", "<password>");
②创建客户端
MongoClientSettings settings = MongoClientSettings.builder()
.applyToClusterSettings(new Block<ClusterSettings.Builder>() {
@Override
public void apply(ClusterSettings.Builder builder) {
builder.hosts(seedList);
}
})
.applyToConnectionPoolSettings(new Block<ConnectionPoolSettings.Builder>() {
@Override
public void apply(ConnectionPoolSettings.Builder builder) {
builder.maxSize(connectionPoolSize);
}
})
.credential(credential)
.build();
MongoClient mongoClient = MongoClients.create(settings);
③获取数据库和集合
MongoDatabase database = mongoClient.getDatabase("数据库名");
MongoCollection collection = database.getCollection("表名")
备注:除了默认的BSON数据格式,还有一种就是使用pojo的数据格式,它可以直接将数据库中的文档转化为实体类而不用再额外增加实体类和文档的转换操作,下面是示例
CodecProvider pojoCodecProvider = PojoCodecProvider.builder().automatic(true).build();
CodecRegistry pojoCodecRegistry = fromRegistries(getDefaultCodecRegistry(), fromProviders(pojoCodecProvider));
配置MongoClient,MongoDatabase或MongoCollection 实例以使用CodecRegistry。只需要配置其中之一
MongoDatabase database = mongoClient.getDatabase("库名").withCodecRegistry(pojoCodecRegistry);
3、增删改查操作
1)查询操作
Document query = new Document("key","value");
collection.find(quert).first;//单个
ArrayList beans = new ArrayList();
FindIterable<Document> findIterable = collection.find(query);//多个,由游标遍历
if (limit > 0) {
findIterable = findIterable.limit(limit);
} if (skip > 0L) {
findIterable = findIterable.skip((int)skip);
} if (orderBy != null) {
findIterable = findIterable.sort(orderBy);
}
MongoCursor<Document> cursor = findIterable.iterator(); while(cursor.hasNext()) {
beans.add(this.toBean(cursor.next()));
}
//聚合操作单字段
Iterable<Document> resultIt=dbCollection.aggregate(Arrays.asList(
Aggregates.match(query),
Aggregates.group("$taskId", Accumulators.sum("sumMsgCount", "$msgCount"))
)
);
//聚合操作单字段
Document groupId = new Document();
groupId.put("taskId", "$taskId");
groupId.put("platform", "$policy.platform");
groupId.put("appId", "$appId"); Iterable<Document> resultIt = dbCollection.aggregate(Arrays.asList(
Aggregates.match(matchId),
Aggregates.group(groupId, Accumulators.sum("msgCount", 1))));
备注:
①与旧版本相比,4.6.1中以Document作为默认的类型参数,另外,组装过滤条件时,一种方式是通过new Document(),另外一种就是通过工具类,Filters和Updates类简化代码
②查询条件是可以拼接的,如query.apend()或者query.put(),同时key可以设置为操作符做进一步过滤,value也可以为另一个Document对象,最终组装成一个Document对象作为Filter条件
③查询还有一种聚合操作,可以通过Aggregates静态工具类组装聚合操作的过滤条件,上例所展示的分组方法前一个参数表示以taskId的值作为分组的id,不填时默认为“_id”,表示对集合中每一个文档计数,第二个参数为对文档中msgCount字段的值进行累加并将值赋予sumMsgCount字段进行展示
④聚合操作如果需要展示多个字段进行分组,则可以将这多个字段转为集合处理
⑤Accumulators是一个计算的工具类,包括累加,求平均值等方法,第一个参数为自定义展示的字段名,第二个参数为要处理的数据,如果为字段表示对该字段值进行计算,如果为常量按上面的例子来说就是每匹配一次对msgCount值进行加一
⑥至于增删改操作添加过滤条件与查询操作相同
⑦当mongoDB为集群状态时,因为每台机子上都会有数据的备份,因此尽管你只是删除一个或更新一个,也需要使用多数的方法
this.dbCollection.deleteMany(query);
this.dbCollection.updateMany(query,update);

MongoDB升级的更多相关文章

  1. MongoDB升级导致启动失败

    起因 最近项目使用MongoDB,但是作为一个技术菜鸟,NoSQL数据库我还真不会用,于是我就在自己的阿里云服务器上安装了一个MongoDB4.0.9. 现象 但是当我使用yum -y update升 ...

  2. MongoDB升级教程

    1.排序 sort()方法:其中 1 为升序排列,而-1是用于降序排列. db.col.find({},{"title":1,_id:0}).sort({"likes&q ...

  3. mongodb安装&简单使用

    转自Mac下使用brew安装mongodb,按着步骤已成功安装. brew常用命令 1.更新brew本身 brew update 2.使用brew安装软件 1 brew install soft_na ...

  4. MongoDB常用命令

    本文整理了一年多以来我常用的MongoDB操作,涉及mongo-shell.pymongo,既有运维层面也有应用层面,内容有浅有深,这也就是我从零到熟练的历程. MongoDB的使用之前也分享过一篇, ...

  5. MongoDB使用小结:一些常用操作分享

    本文整理了一年多以来我常用的MongoDB操作,涉及mongo-shell.pymongo,既有运维层面也有应用层面,内容有浅有深,这也就是我从零到熟练的历程. MongoDB的使用之前也分享过一篇, ...

  6. [教程]MongoDB 从入门到进阶 (User系统)

    自从MongoDB升级到2.4之后,User系统,或者说是权限系统有了翻天覆地的变化. 在MongoDB2.4之前的User系统,除了用户名和密码之外,只有一个ReadOnly属性. 如果一个用户在a ...

  7. MongoDB最佳实践中文手册

    背景:查阅了一下MongoDB的相关文档,发现中文文档还是比较少的,工作中需要用到MongoDB,而这本<MongoDB最佳实践>是很好的选择,所以就把这本手册翻译了一下,其中生涩的专业用 ...

  8. MongoDB索引管理

    一.创建索引 创建索引使用db.collectionName.ensureIndex(...)方法进行创建: 语法: >db.COLLECTION_NAME.ensureIndex({KEY:1 ...

  9. MongoDB 不在开源了,使用 Homebrew 安装只能玩社区版了

    使用了大半年的 mongodb ,最近在公司的新项目中应用,在 mac 上安装 mongodb 时发现始终安装不了,一直在报下面这样的错误: brew install mongodb 升级 brew  ...

  10. 快速了解MongoDB

    简介 MongoDB是一款为广泛的现代应用程序设计的高性能.可扩展.分布式数据库系统.MongoDB可用于不同规模大小的组织,为那些对系统低延迟.高吞吐量以及可持续性有很高要求的应用提供稳定关键的服务 ...

随机推荐

  1. Java安全之JDBC Attacks学习记录

    Java安全之JDBC Attacks 写在前面 很早就看到了Make JDBC Attacks Brilliant Again议题,一直想分析学习下,但是太懒. MySQL 原理概述 "扩 ...

  2. GIS数据下载合集:遥感、土壤、气象、行政区数据...

      本文介绍GIS领域相关的各类综合数据免费获取网站,包括遥感数据.气象数据.土地数据.土壤数据.农业数据.行政区数据.社会数据.经济数据等等.   数据较多,大家可以直接通过下方目录加以总览:点击数 ...

  3. Matplotlib 绘制折线图

    Matplotlib matplotlib: 最流行的Python底层绘图库,主要做数据可视化图表,名字取材于MATLAB,模仿MATLAB构建 绘制折线图 绘制两小时的温度变化 from matpl ...

  4. 多目标优化经典算法——NSGA-II

    参考博客链接 https://blog.csdn.net/qq_35414569/article/details/79639848?utm_medium=distribute.pc_relevant. ...

  5. 如何进行动态ip的域名解析设置?

    如何进行动态ip的域名解析设置?目前,有一部分域名客户出于节省成本.技术验证等因素,会把自己家里或是部门的电脑用来当做Web服务器.mail服务器或是ftp服务器.如果想提供给其他人长期浏览,一般都要 ...

  6. Map接口中的常用方法-Map集合遍历建找值方式

    Map接口中的常用方法 Map接口中定义了很多方法,常用的如下: public v put(K key,v value):把指定的键与指定的值添加到Map集合中. public v remove(0b ...

  7. 数据采集之刷cnblog评论

    python代码如下: import random import time import requests cookies = { '__gads': 'ID=3c504aa17c4a7048:T=1 ...

  8. PDF-XChange Editor

    软件简介 PDF-XChange Editor官方版是PDF-XChange的增强版本编辑器,软件完全绿色免费,且功能无限制.PDF-XChange Editor官方版主要提供PDF电子文档的编辑功能 ...

  9. 学习ASP.NET Core Blazor编程系列二十六——登录(5)

    学习ASP.NET Core Blazor编程系列文章之目录 学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应 ...

  10. NETAPP硬盘更换

    netapp硬盘新增 一.找到坏盘,插上新盘# 1.登陆到想要点亮的硬盘相对应的控制器上,并进去高级模式. priv set advanced 2.利用disk show -v 查看想要点亮的硬盘名字 ...