因业务需要所以需要对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. echarts图表配置

    1.柱状图 option = { xAxis: { type: 'category', data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] ...

  2. djiango框架推导过程,jinja2模板语法,jiango简介,基本操作命令

    djiango框架推导过程,jinja2模板语法,jiango简介,基本操作命令 一.web框架前戏 web 框架可以理解为是基于会联网的web服务端>>>socket服务端 1.w ...

  3. 嵌入式Linux—文件IO

    文件IO 在 Linux 系统中,一切都是" 文件":普通文件.驱动程序.网络通信等等.所有的操作,都是通过"文件 IO"来进行的.所以,很有必要掌握文件操作的 ...

  4. CC1链详解

    前言:这篇文章是对CC1的总结,个人学习,如有不对请多指教.谢谢! 环境:jdk8u71以下,因为在该jdk版本以上这个漏洞已经被修复了 下载链接:https://www.oracle.com/cn/ ...

  5. 【LeetCode字符串#05】基于个人理解的KMP算法图解,以及应用到strStr()函数实现

    KMP算法(用于实现 strStr()) strStr()函数是用来在一个字符串中搜索是否存在另一个字符串的函数,其匹配字符串方式为KMP算法 KMP算法基础理论 假设有如下两个字符串 文本串 aab ...

  6. CentOS7 登录到控制台后无法联网

    登录到控制台, ping 不通网络 解决方法 通过命令找到网卡的配置文件见 ll /etc/sysconfig/network-scripts/ | grep ifcfg-en 编辑配置文件 vi i ...

  7. springboot FilterRegistrationBean 拦截器的使用

    1.创建一个filter package com.ruoyi.weixin.user.interator; import com.ruoyi.common.utils.SecurityUtils; i ...

  8. 六:spring Cloud

    六Spring Cloud 回顾之前的: javaSE 数据库 前端 Servlet HTTP Mybatis Spring SpringMVC SpringBoot Dubbo.Zookeeper. ...

  9. Cesium用wsad进行场景漫游(九)

    2023-01-14 先看效果,wsadqe控制方向升降,鼠标拖动屏幕也可以控制方向 整理下思路: 1. 使用movement变量控制是否进行漫游 2.1 进行漫游则先将enableRotate等全部 ...

  10. LG P4213【模板】杜教筛(Sum)

    \(\text{Problem}\) 求 \[\sum_{i=1}^n \varphi(i) \] 和 \[\sum_{i=1}^n \mu(i) \] \(1 \le n < 2^{31}\) ...