MongoDB 连接

标准 URI 连接语法:

  1. mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
  • mongodb:// 这是固定的格式,必须要指定。
  • username:password@ 可选项,如果设置,在连接数据库服务器之后,驱动都会尝试登录这个数据库
  • host1 必须的指定至少一个host, host1 是这个URI唯一要填写的。它指定了要连接服务器的地址。如果要连接复制集,请指定多个主机地址。
  • portX 可选的指定端口,如果不填,默认为27017
  • /database 如果指定username:password@,连接并验证登录指定数据库。若不指定,默认打开 test 数据库。
  • ?options 是连接选项。如果不使用/database,则前面需要加上/。所有连接选项都是键值对name=value,键值对之间通过&或;(分号)隔开

标准的连接格式包含了多个选项(options),如下所示:

选项 描述
replicaSet=name 验证replica set的名称。 Impliesconnect=replicaSet.
slaveOk=true false
safe=true false
w=n 驱动添加 { w : n } 到getLastError命令. 应用于safe=true。
wtimeoutMS=ms 驱动添加 { wtimeout : ms } 到 getlasterror 命令. 应用于 safe=true.
fsync=true false
journal=true false
connectTimeoutMS=ms 可以打开连接的时间。
socketTimeoutMS=ms 发送和接受sockets的时间。

MongoDB Java

环境配置

在 Java 程序中如果要使用 MongoDB,你需要确保已经安装了 Java 环境及 MongoDB JDBC 驱动。

本章节实例适合 Mongo 3.x 以上版本。

现在让我们来检测你是否安装了 MongoDB JDBC 驱动。

连接数据库

连接数据库,你需要指定数据库名称,如果指定的数据库不存在,mongo会自动创建数据库。

连接数据库的Java代码如下:

  1. import com.mongodb.MongoClient;
  2. import com.mongodb.client.MongoDatabase;
  3. public class MongoDBJDBC{
  4.   public static void main( String args[] ){
  5.     try{  
  6.       // 连接到 mongodb 服务
  7.         MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
  8.      
  9.         // 连接到数据库
  10.         MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol");  
  11.       System.out.println("Connect to database successfully");
  12.        
  13.     }catch(Exception e){
  14.       System.err.println( e.getClass().getName() + ": " + e.getMessage() );
  15.     }
  16.   }
  17. }

现在,让我们来编译运行程序并连接到数据库 mycol。

你可以根据你的实际环境改变 MongoDB JDBC 驱动的路径。

本实例将 MongoDB JDBC 启动包 mongo-java-driver-3.2.2.jar 放在本地目录下:

  1. $ javac -cp .:mongo-java-driver-3.2.2.jar MongoDBJDBC.java
  2. $ java -cp .:mongo-java-driver-3.2.2.jar MongoDBJDBC
  3. Connect to database successfully
  4. Authentication: true

本实例中 Mongo 数据库无需用户名密码验证。如果你的 Mongo 需要验证用户名及密码,可以使用以下代码:

  1. import java.util.ArrayList;  
  2. import java.util.List;  
  3. import com.mongodb.MongoClient;  
  4. import com.mongodb.MongoCredential;  
  5. import com.mongodb.ServerAddress;  
  6. import com.mongodb.client.MongoDatabase;  
  7.  
  8. public class MongoDBJDBC {  
  9.   public static void main(String[] args){  
  10.       try {  
  11.           //连接到MongoDB服务 如果是远程连接可以替换“localhost”为服务器所在IP地址  
  12.           //ServerAddress()两个参数分别为 服务器地址 和 端口  
  13.           ServerAddress serverAddress = new ServerAddress("localhost",27017);  
  14.           List<ServerAddress> addrs = new ArrayList<ServerAddress>();  
  15.           addrs.add(serverAddress);  
  16.              
  17.           //MongoCredential.createScramSha1Credential()三个参数分别为 用户名 数据库名称 密码  
  18.           MongoCredential credential = MongoCredential.createScramSha1Credential("username", "databaseName", "password".toCharArray());  
  19.           List<MongoCredential> credentials = new ArrayList<MongoCredential>();  
  20.           credentials.add(credential);  
  21.              
  22.           //通过连接认证获取MongoDB连接  
  23.           MongoClient mongoClient = new MongoClient(addrs,credentials);  
  24.              
  25.           //连接到数据库  
  26.           MongoDatabase mongoDatabase = mongoClient.getDatabase("databaseName");  
  27.           System.out.println("Connect to database successfully");  
  28.       } catch (Exception e) {  
  29.           System.err.println( e.getClass().getName() + ": " + e.getMessage() );  
  30.       }  
  31.   }  
  32. }

创建集合

我们可以使用 com.mongodb.client.MongoDatabase 类中的createCollection()来创建集合

代码片段如下:

  1. import com.mongodb.MongoClient;
  2. import com.mongodb.client.MongoDatabase;
  3. public class MongoDBJDBC{
  4.   public static void main( String args[] ){
  5.     try{  
  6.     // 连接到 mongodb 服务
  7.     MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
  8.        
  9.      
  10.     // 连接到数据库
  11.     MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol");  
  12.     System.out.println("Connect to database successfully");
  13.     mongoDatabase.createCollection("test");
  14.     System.out.println("集合创建成功");
  15.        
  16.     }catch(Exception e){
  17.       System.err.println( e.getClass().getName() + ": " + e.getMessage() );
  18.     }
  19.   }
  20. }

编译运行以上程序,输出结果如下:

  1. Connect to database successfully
  2. 集合创建成功

获取集合

我们可以使用com.mongodb.client.MongoDatabase类的 getCollection() 方法来获取一个集合

代码片段如下:

  1. import org.bson.Document;
  2. import com.mongodb.MongoClient;
  3. import com.mongodb.client.MongoCollection;
  4. import com.mongodb.client.MongoDatabase;
  5. public class MongoDBJDBC{
  6.   public static void main( String args[] ){
  7.     try{  
  8.       // 连接到 mongodb 服务
  9.         MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
  10.      
  11.         // 连接到数据库
  12.         MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol");  
  13.       System.out.println("Connect to database successfully");
  14.      
  15.       MongoCollection<Document> collection = mongoDatabase.getCollection("test");
  16.       System.out.println("集合 test 选择成功");
  17.     }catch(Exception e){
  18.       System.err.println( e.getClass().getName() + ": " + e.getMessage() );
  19.     }
  20.   }
  21. }

编译运行以上程序,输出结果如下:

  1. Connect to database successfully
  2. 集合 test 选择成功

插入文档

我们可以使用com.mongodb.client.MongoCollection类的 insertMany() 方法来插入一个文档

代码片段如下:

  1. import java.util.ArrayList;
  2. import java.util.List;
  3. import org.bson.Document;
  4. import com.mongodb.MongoClient;
  5. import com.mongodb.client.MongoCollection;
  6. import com.mongodb.client.MongoDatabase;
  7. public class MongoDBJDBC{
  8.   public static void main( String args[] ){
  9.     try{  
  10.         // 连接到 mongodb 服务
  11.         MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
  12.        
  13.         // 连接到数据库
  14.         MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol");  
  15.         System.out.println("Connect to database successfully");
  16.        
  17.         MongoCollection<Document> collection = mongoDatabase.getCollection("test");
  18.         System.out.println("集合 test 选择成功");
  19.         //插入文档  
  20.         /**
  21.         * 1. 创建文档 org.bson.Document 参数为key-value的格式
  22.         * 2. 创建文档集合List<Document>
  23.         * 3. 将文档集合插入数据库集合中 mongoCollection.insertMany(List<Document>) 插入单个文档可以用 mongoCollection.insertOne(Document)
  24.         * */
  25.         Document document = new Document("title", "MongoDB").  
  26.         append("description", "database").  
  27.         append("likes", 100).  
  28.         append("by", "Fly");  
  29.         List<Document> documents = new ArrayList<Document>();  
  30.         documents.add(document);  
  31.         collection.insertMany(documents);  
  32.         System.out.println("文档插入成功");  
  33.     }catch(Exception e){
  34.         System.err.println( e.getClass().getName() + ": " + e.getMessage() );
  35.     }
  36.   }
  37. }

编译运行以上程序,输出结果如下:

  1. Connect to database successfully
  2. 集合 test 选择成功
  3. 文档插入成功

检索所有文档

我们可以使用 com.mongodb.client.MongoCollection 类中的 find() 方法来获取集合中的所有文档。

此方法返回一个游标,所以你需要遍历这个游标。

代码片段如下:

  1. import org.bson.Document;
  2. import com.mongodb.MongoClient;
  3. import com.mongodb.client.FindIterable;
  4. import com.mongodb.client.MongoCollection;
  5. import com.mongodb.client.MongoCursor;
  6. import com.mongodb.client.MongoDatabase;
  7. public class MongoDBJDBC{
  8.   public static void main( String args[] ){
  9.     try{  
  10.         // 连接到 mongodb 服务
  11.         MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
  12.        
  13.         // 连接到数据库
  14.         MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol");  
  15.         System.out.println("Connect to database successfully");
  16.        
  17.         MongoCollection<Document> collection = mongoDatabase.getCollection("test");
  18.         System.out.println("集合 test 选择成功");
  19.        
  20.         //检索所有文档  
  21.         /**
  22.         * 1. 获取迭代器FindIterable<Document>
  23.         * 2. 获取游标MongoCursor<Document>
  24.         * 3. 通过游标遍历检索出的文档集合
  25.         * */  
  26.         FindIterable<Document> findIterable = collection.find();  
  27.         MongoCursor<Document> mongoCursor = findIterable.iterator();  
  28.         while(mongoCursor.hasNext()){  
  29.           System.out.println(mongoCursor.next());  
  30.         }  
  31.      
  32.     }catch(Exception e){
  33.         System.err.println( e.getClass().getName() + ": " + e.getMessage() );
  34.     }
  35.   }
  36. }

编译运行以上程序,输出结果如下:

  1. Connect to database successfully
  2. 集合 test 选择成功
  3. Document{{_id=56e65fb1fd57a86304fe2692, title=MongoDB, description=database, likes=100, by=Fly}}

更新文档

你可以使用 com.mongodb.client.MongoCollection 类中的 updateMany() 方法来更新集合中的文档。

代码片段如下:

  1. import org.bson.Document;
  2. import com.mongodb.MongoClient;
  3. import com.mongodb.client.FindIterable;
  4. import com.mongodb.client.MongoCollection;
  5. import com.mongodb.client.MongoCursor;
  6. import com.mongodb.client.MongoDatabase;
  7. import com.mongodb.client.model.Filters;
  8. public class MongoDBJDBC{
  9.   public static void main( String args[] ){
  10.     try{  
  11.         // 连接到 mongodb 服务
  12.         MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
  13.        
  14.         // 连接到数据库
  15.         MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol");  
  16.         System.out.println("Connect to database successfully");
  17.        
  18.         MongoCollection<Document> collection = mongoDatabase.getCollection("test");
  19.         System.out.println("集合 test 选择成功");
  20.        
  21.         //更新文档   将文档中likes=100的文档修改为likes=200  
  22.         collection.updateMany(Filters.eq("likes", 100), new Document("$set",new Document("likes",200)));  
  23.         //检索查看结果  
  24.         FindIterable<Document> findIterable = collection.find();  
  25.         MongoCursor<Document> mongoCursor = findIterable.iterator();  
  26.         while(mongoCursor.hasNext()){  
  27.           System.out.println(mongoCursor.next());  
  28.         }  
  29.      
  30.     }catch(Exception e){
  31.         System.err.println( e.getClass().getName() + ": " + e.getMessage() );
  32.     }
  33.   }
  34. }

编译运行以上程序,输出结果如下:

  1. Connect to database successfully
  2. 集合 test 选择成功
  3. Document{{_id=56e65fb1fd57a86304fe2692, title=MongoDB, description=database, likes=200, by=Fly}}

删除第一个文档

要删除集合中的第一个文档,首先你需要使用com.mongodb.DBCollection类中的 findOne()方法来获取第一个文档,然后使用remove 方法删除。

代码片段如下:

  1. import org.bson.Document;
  2. import com.mongodb.MongoClient;
  3. import com.mongodb.client.FindIterable;
  4. import com.mongodb.client.MongoCollection;
  5. import com.mongodb.client.MongoCursor;
  6. import com.mongodb.client.MongoDatabase;
  7. import com.mongodb.client.model.Filters;
  8. public class MongoDBJDBC{
  9.   public static void main( String args[] ){
  10.     try{  
  11.         // 连接到 mongodb 服务
  12.         MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
  13.         // 连接到数据库
  14.         MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol");  
  15.         System.out.println("Connect to database successfully");
  16.         MongoCollection<Document> collection = mongoDatabase.getCollection("test");
  17.         System.out.println("集合 test 选择成功");
  18.         //删除符合条件的第一个文档  
  19.         collection.deleteOne(Filters.eq("likes", 200));  
  20.         //删除所有符合条件的文档  
  21.         collection.deleteMany (Filters.eq("likes", 200));  
  22.         //检索查看结果  
  23.         FindIterable<Document> findIterable = collection.find();  
  24.         MongoCursor<Document> mongoCursor = findIterable.iterator();  
  25.         while(mongoCursor.hasNext()){  
  26.           System.out.println(mongoCursor.next());  
  27.         }  
  28.          
  29.     }catch(Exception e){
  30.       System.err.println( e.getClass().getName() + ": " + e.getMessage() );
  31.     }
  32.   }
  33. }

编译运行以上程序,输出结果如下:

  1. Connect to database successfully
  2. 集合 test 选择成功

更多扩展:https://www.runoob.com/mongodb/mongodb-install-php-driver.html

MongoDB Java连接---MongoDB基础用法(四)的更多相关文章

  1. Java 连接MongoDB

    1.驱动 通过java连接MongoDB需要一个java版的驱动 下载地址:http://mongodb.github.io/mongo-java-driver/ 2.连接MongoDB 通过 com ...

  2. MongoDB第三天(正则,管道,聚合,字符串,算术,日期,java连接MongoDB)

    部分正则表达式: i:忽略大小写 m:多行查找 x:设置 x 选项后,正则表达式中的非转义的空白字符将被忽略.   s:允许点字符(即.)匹配包括换行符在内的所有字符. w:匹配包括下划线的任何单词字 ...

  3. java连接mongodb数据库

    最近毕设需要用到这个数据库.然而又不会,没办法,只能上网学习学习. 记录一下java连接mongodb数据库的简单方法.这里只是记录一下学习.熟悉一下CURD方法. 但是毕业用到的是SpringBoo ...

  4. java 连接 mongodb 及使用

    MongoDB是当今非常流行的一款NoSQL数据库,本文介绍如何使用MongoDB的Java驱动来操作MongoDB. 一.引入MongoDB Java Driver包 如果需要操作MongoDB的J ...

  5. Java连接MongoDB报错“java.lang.IllegalArgumentException: clusterListener can not be null”的解决办法

    我使用的MongoDB版本是3.6.9. 下面是一个很基础的示例代码,功能就是连接MongoDB: package com.zifeiy.snowflake.handle.etl.mongodb; i ...

  6. java连接mongodb的一个奇葩问题及奇葩解决方式

    昨天在eclipse中编写代码,本来连接mongodb进行各项操作都是正常的,但是有一会儿突然之间就没法连接了,还一直抱错,错误如下: 信息: Cluster created with setting ...

  7. java连接MongoDB查询导出为excel表格

    背景 因为项目需求.每一个星期须要统计每一个公众号7天的訪问数,月底就须要统计一个月的訪问数,40多个公众号.每次手动统计都须要花费1个小时,总之是一项无技术耗时耗神的手工活. 于是.想写个程序来统计 ...

  8. Java连接MongoDB进行增删改查

    1.导入必须的包: 详情看项目:http://pan.baidu.com/s/1cvDAOY 2.通过Myeclipse创建WEB项目 3. 3.bean:创建实体类 package com.bean ...

  9. MongoDB Java 连接配置

    [前言] 由于处于线程安全等考虑,MongoDBJava从3.0开始已经打算废弃DB开头的类的使用,所以整体调用上有了较大的区别,特以此文志之 [正文] 环境配置 在Java程序中如果要使用Mongo ...

随机推荐

  1. CSS3 新特性总结

    1.边框 border-radius: 1-4 length|% / 1-4 length|%; 每个半径的四个值的顺序是:左上角,右上角,右下角,左下角.若省略左下角,和右上角相同,省略右下角,左上 ...

  2. vue学习04 v-on指令

    vue学习04 v-on指令 v-on的作用是为元素绑定事件,比如click单击,dbclick双击 v-on指令可简写为@ 代码测试 <!DOCTYPE html> <html l ...

  3. 怎么摆脱又臭又长的 Git 命令?

    在使用 Git 的时候,虽然大部分时候我们用的是图形客户端,但图形客户端不能解决所有的操作,所以,也少不了要需要使用命令行的时候. 但有些 Git 命令和参数确实又不好记,甚至有的命令每次要用的时候需 ...

  4. kubernetes1.15极速部署prometheus和grafana

    关于prometheus和grafana prometheus负责监控数据采集,grafana负责展示,下图来自官网: 环境信息 硬件:三台CentOS 7.7服务器 kubernetes:1.15 ...

  5. 简化ETL工作,编写一个Canal胶水层

    前提 这是一篇憋了很久的文章,一直想写,却又一直忘记了写.整篇文章可能会有点流水账,相对详细地介绍怎么写一个小型的"框架".这个精悍的胶水层已经在生产环境服役超过半年,这里尝试把耦 ...

  6. Java知识系统回顾整理01基础05控制流程02 switch

    一.switch switch 语句相当于 if else的另一种表达方式 switch可以使用byte,short,int,char,String,enum 注: 每个表达式结束,都应该有一个bre ...

  7. Python实现的数据结构与算法之快速排序详解

    一.概述 快速排序(quick sort)是一种分治排序算法.该算法首先 选取 一个划分元素(partition element,有时又称为pivot):接着重排列表将其 划分 为三个部分:left( ...

  8. Arduino 中 EEprom 写入读取清除

    转自:https://www.arduino.cn/thread-1157-1-1.html EEPROM (Electrically Erasable Programmable Read-Only ...

  9. C/C++ 条件编译

    条件编译就是指有条件的编译,即根据条件去编译代码,在编译阶段时就对代码做出取舍,有的编译,有的不编译,这样比写成一个个判断函数更有效率,比如工程代码大部分的地方都类似,只有个别语句因为使用的硬件版本不 ...

  10. 怎么写一个Activity

    a.新建一个类继承Actitvity b.重写oncreate方法 setContentView(R.layout.XXX);//设置布局文件 c.注册activity <activity an ...