因业务需要所以需要对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);

最新文章

  1. python笔记
  2. Alipay秘钥问题
  3. Linux内核--网络栈实现分析(二)--数据包的传递过程(上)
  4. VTK初学一,b_PolyVertex_CellArray多个点的绘制
  5. 修改 OWA 修改密码的生效时间
  6. cdoj 80 Cube 水题
  7. 几个js的linq实现
  8. REST风格的服务
  9. MySQL root密码忘记解决
  10. ifrem上传文件后显示
  11. 知识小罐头03(idea+maven+部署war包到tomcat 上)
  12. 解决导出CSV后在EXCEL打开纯数字前面0丢失问题
  13. Elasticsearch分片优化
  14. 安装Joomla!3
  15. 解决Installation error: INSTALL_FAILED_VERSION_DOWNGRADE错误
  16. [转]F5 BIG-IP负载均衡器配置实例与Web管理界面体验
  17. Samsung_tiny4412(驱动笔记08)----jiffies,timer,kthread,workqueue,tasklet
  18. vue 组件 单选切换控制模板 v-bind-is
  19. [ActionScript 3.0] 通过as3操作web内容
  20. snmp 介绍和Ubuntu安装使用

热门文章

  1. [0]为什么是SpinalHDL-Spinal简介
  2. drf-day6——九个视图子类、视图集、路由系统、认证组件
  3. SpringCloud 消费请求Eureka调用服务提供者报错
  4. 一款备受欢迎的用户脚本管理器插件TampermonKey-油猴脚本管理器安装与使用
  5. C++练习8 常量的说明
  6. kali挂代理之——proxychains4
  7. slate源码解析(二)- 基本框架与数据模型
  8. 基于官方Chrome、Firefox软件包得到便携版
  9. 地理探测器简介(R语言)
  10. windows pwn(一)