MongoDB操作类封装实例代码
前言
最近接到一个需求,要做MongoDB打点数据的统计,在学习过MongoDB的操作之后,封装了一个MongoDB的操作类,分为两部分,基本思想是参照了自己写过的mysql的操作类。一个是基本的操作类,包括所有基本操作的静态方法,还有一个是mongoobject,就是具体操作的实现类。
以后再写如何用spring boot写一个简单的统计服务。
MongoDB操作类封装
mongobase代码如下:
package com.fun.mongodb; import com.fun.frame.SourceCode; import com.mongodb.MongoClient; import com.mongodb.MongoClientURI; import com.mongodb.MongoCredential; import com.mongodb.ServerAddress; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import org.bson.Document; import java.util.Arrays; import java.util.List; /** * mongo操作类的基础类 */ public class MongoBase extends SourceCode { /** * 获取服务地址list * * @param addresses * @return */ public static List<ServerAddress> getServers(ServerAddress... addresses) { return Arrays.asList(addresses); } /** * 获取服务地址 * * @param host * @param port * @return */ public static ServerAddress getServerAdress(String host, int port) { return new ServerAddress(host, port); } /** * 获取认证list * * @param credentials * @return */ public static List<MongoCredential> getCredentials(MongoCredential... credentials) { return Arrays.asList(credentials); } /** * 获取验证 * * @param userName * @param database * @param password * @return */ public static MongoCredential getMongoCredential(String userName, String database, String password) { return MongoCredential.createCredential(userName, database, password.toCharArray()); } /** * 获取mongo客户端 * * @param addresses * @param credentials * @return */ public static MongoClient getMongoClient(List<ServerAddress> addresses, List<MongoCredential> credentials) { return new MongoClient(addresses, credentials); } /** * 连接mongo数据库 * * @param mongoClient * @param databaseName * @return */ public static MongoDatabase getMongoDatabase(MongoClient mongoClient, String databaseName) { return mongoClient.getDatabase(databaseName); } /** * 连接mongo集 * * @param mongoDatabase * @param collectionName * @return */ public static MongoCollection<Document> getMongoCollection(MongoDatabase mongoDatabase, String collectionName) { return mongoDatabase.getCollection(collectionName); } /** * 关闭数据库连接 * * @param mongoClient */ public static void MongoOver(MongoClient mongoClient) { mongoClient.close(); } /** * 获取mongo客户端对象,通过servers和credentials对象创建 * * @param mongoObject * @return */ public static MongoClient getMongoClient(MongoObject mongoObject) { MongoClient mongoClient = new MongoClient(getServers(getServerAdress(mongoObject.host, mongoObject.port)), getCredentials(getMongoCredential(mongoObject.user, mongoObject.database, mongoObject.password))); return mongoClient; } /** * 获取mongo客户端对象,通过uri方式连接 * * @param mongoObject * @return */ public static MongoClient getMongoClientOnline(MongoObject mongoObject) { String format = String.format("mongodb://%s:%s@%s:%d/%s", mongoObject.user, mongoObject.password, mongoObject.host, mongoObject.port, mongoObject.database); return new MongoClient(new MongoClientURI(format)); } /** * 获取collection对象 * * @param mongoObject * @return */ public static MongoCollection<Document> getCollection(MongoObject mongoObject, String collectionName) { return getMongoClient(mongoObject).getDatabase(mongoObject.database).getCollection(collectionName); } /** * 获取collection对象 * * @param mongoObject * @return */ public static MongoCollection<Document> getCollectionOnline(MongoObject mongoObject, String collectionName) { return getMongoClientOnline(mongoObject).getDatabase(mongoObject.database).getCollection(collectionName); } }
mongoobject的代码如下:
package com.fun.mongodb; import com.mongodb.MongoClient; import com.mongodb.client.MongoCollection; import org.bson.Document; /** * mongo数据库配置对象,针对单个数据服务,单个身份验证 */ public class MongoObject extends MongoBase { String host; int port; String user; String password; String database; MongoClient mongoClient; /** * 创建数据连接 * * @param host * @param port * @param user * @param password * @param database */ public MongoObject(String host, int port, String user, String password, String database) { this.host = host; this.port = port; this.user = user; this.password = password; this.database = database; this.mongoClient = getMongoClient(this); } /** * 创建数据库连接 * * @param port * @param host * @param user * @param password * @param database */ public MongoObject(int port, String host, String user, String password, String database) { this.host = host; this.port = port; this.user = user; this.password = password; this.database = database; this.mongoClient = getMongoClientOnline(this); } /** * 获取colletion对象 * * @param collectionName * @return */ public MongoCollection<Document> getMongoCollection(String collectionName) { MongoClient mongoClientOnline = getMongoClientOnline(this); return mongoClientOnline.getDatabase(database).getCollection(collectionName); } /** * 关闭连接 */ public void over() { MongoOver(this.mongoClient); } } @Override public MongoObject clone() { return new MongoObject(this.host, this.port, this.user, this.password, this.database); } public MongoObject clone2() { return new MongoObject(this.port, this.host, this.user, this.password, this.database); }
具体效果非常不错,测试代码如下:
public static void main(String[] args) { MongoObject ready = new MongoObject("*****", 5117, "fission_record", "fission_record", "fission_record"); MongoCollection<Document> app = ready.getMongoCollection("app_logs_20181109"); Document first = app.find().first(); output(first); ready.over(); }
打印内容如下:
Document{{_id=5be4ce052ce01b21b6c26a64, _class=com.fission.next.record.bean.AppRecordBean, user_id=5482, action_type={"gameId":2,"userId":"5482"}, action_extern=DataSta_Game_Starts, client_version=15, client_ip=114.5.146.239, client_imei=UNKNOWN, client_dev=xiaomi-Redmi 5 Plus, client_type=200, server_time=1541721601655, os_name=200, os_version=15, client_time=1541721577025}}
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对猪先飞的支持。
相关文章
- 由于要使用mikoomi mongodb plugin插件,所以需要php对mongodb的扩展支持,默认通过源安装的php并没有mongodb的扩展支持,具体可以通过php -m|grep mongo 验证 。这里就结...2016-11-25
- 以前我们开发大型项目时都会用到svn来同步,因为开发产品的人过多,所以我们会利用软件来管理,今天发有一居然可以利用php来管理svn哦,好了看看吧。 代码如下 ...2016-11-25
- 操作类就是把一些常用的一系列的数据库或相关操作写在一个类中,这样调用时我们只要调用类文件,如果要执行相关操作就直接调用类文件中的方法函数就可以实现了,下面整理了...2016-11-25
基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件功能
这篇文章主要介绍了基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-23安装使用Mongoose配合Node.js操作MongoDB的基础教程
这篇文章主要介绍了安装使用Mongoose来让Node.js操作MongoDB的基础教程,前端js+后端node+js操作MongoDB正是所谓最流行的一种JavaScript全栈开发方案,需要的朋友可以参考下...2016-03-03- 在本篇内容里小编给大家分享的是关于c#使用封装方法以及相关知识点,对此有需要的朋友们可以学习下。...2020-06-25
- 这篇文章主要介绍了vue+element-ui表格封装tag标签使用插槽,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-19
- 传统的关系数据库一般由数据库(database)、表(table)、记录(record)三个层次概念组成,MongoDB是由数据库(database)、集合(collection)、文档对象(document)三个层次组成。MongoDB对于关系型数据库里的表,但是集合中没有列、行和关...2013-09-11
修复 Mac brew 安装 mongodb 报 Error: No available formula with the name ‘mongodb’ 问题详解
最近在同事新的 Mac 电脑上安装 mongodb,报了错误 Error: No available formula with the name ‘mongodb’,今天就说说这个问题如何解决,需要的朋友可以参考下...2020-07-11- 这篇文章主要介绍了封装 axios+promise通用请求函数操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-12
- 这篇文章主要为大家详细介绍了原生JS封装Ajax插件,为大家介绍不同域之间互相请求资源的跨域...2016-05-05
- 这篇文章主要介绍了vue 将多个过滤器封装到一个文件中实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧...2020-09-05
- 这篇文章主要介绍了Mybatis返回结果封装map过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-09-19
- 这篇文章主要介绍了Vue封装全局过滤器Filters的步骤,通过封装vue全局过滤器实现filters的统一管理。感兴趣的朋友可以了解下...2020-09-16
- 这篇文章主要介绍了MongoDb CPU利用率过高问题如何解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-12-08
Windows10安装MongoDB4.0详细步骤及启动配置教程
这篇文章主要介绍了Windows10安装MongoDB4.0详细步骤及启动配置教程 ,本文通过图文并茂的形式给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-11- 这篇文章主要介绍了如何通过Proxy实现JSBridge模块化封装,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-10-23
- 这篇文章主要介绍了CentOS7.2 安装 MongoDB 3.4的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-11
- 这篇文章主要介绍了NestJs使用Mongoose对MongoDB操作的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-22
- 这篇文章主要介绍了WebService 的简单封装接口调用方法,主要是通过简单的sql语句来查询数据库,从而返回dataset,十分简单实用,有需要的小伙伴可以参考下。...2020-06-25