mongdb drivar for java 3.0版本之mongo-java-driver-3.0.0.jar 使用

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介: 本文使用的是最新的3.0版本驱动包。maven地址 <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>3.0.0</version></depend

本文使用的是最新的3.0版本驱动包。maven地址

<dependency>
	<groupId>org.mongodb</groupId>
	<artifactId>mongo-java-driver</artifactId>
	<version>3.0.0</version>
</dependency>


说明,2.6以后的版本的java驱动和旧的版本有很大区别,本文是基于3.0版本的驱动

无需认证连接mongdb服务器

import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoCredential;
import com.mongodb.MongoException;
import com.mongodb.WriteConcern;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
import com.mongodb.DBCursor;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;

import java.net.InetAddress;
import java.net.InterfaceAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.bson.Document;

//不需要认证
public class Auth_no {
	
	/**
	 * 获得无密码验证的client
	 * @param ip
	 * @param port
	 * @return
	 */
	public static MongoClient getClient(String ip,int port){
		MongoClient client=null;
		try {
		MongoClientOptions.Builder build = new MongoClientOptions.Builder();
		// 与数据最大连接数50
		build.connectionsPerHost(50);
		// 如果当前所有的connection都在使用中,则每个connection上可以有50个线程排队等待
		build.threadsAllowedToBlockForConnectionMultiplier(50);
		build.connectTimeout(1 * 60 * 1000);
		build.maxWaitTime(2 * 60 * 1000);
		MongoClientOptions options = build.build();
		InetAddress inetAddress;
	
			inetAddress = InetAddress.getByName(ip);
		
		ServerAddress addr=new ServerAddress(inetAddress, port);//设置地址
		client = new MongoClient(addr, options);
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return client;
	}
	
	
	public static void main(String args[]) throws UnknownHostException {
		MongoClientOptions.Builder build = new MongoClientOptions.Builder();
		// 与数据最大连接数50
		build.connectionsPerHost(50);
		// 如果当前所有的connection都在使用中,则每个connection上可以有50个线程排队等待
		build.threadsAllowedToBlockForConnectionMultiplier(50);
		build.connectTimeout(1 * 60 * 1000);
		build.maxWaitTime(2 * 60 * 1000);
		MongoClientOptions options = build.build();
		InetAddress inetAddress=InetAddress.getByName("127.0.0.1");
		ServerAddress addr=new ServerAddress(inetAddress, 2222);//设置地址
		MongoClient client = new MongoClient(addr, options);

		// 获取数据库test,不存在的话,会自动建立该数据库
		MongoDatabase db = client.getDatabase("lhy");

		// 获取data集合,不存在的话,会自动建立该集合(相当于关系数据库中的数据表)
		MongoCollection<Document> users = db.getCollection("lhy");
		Document document = new Document();
		document.append("firstName", "lei");
		document.append("address", "sichuan chengdu");
		users.insertOne(document);
		// MongoClient使用完后必须要close释放资源
		client.close();
	}
}

需要认证

import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoClientURI;
import com.mongodb.MongoCredential;
import com.mongodb.MongoException;
import com.mongodb.WriteConcern;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
import com.mongodb.DBCursor;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;

import java.net.InetAddress;
import java.net.InterfaceAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.bson.Document;

/**
 * 需要认证
 * @author Administrator
 *
 */
public class Auth_ok {
	
	
	
	/**
	 * 第一种认证方式
	 */
	public static void auth1(){
		
		String sURI = String.format("mongodb://%s:%s@%s:%d/%s", "lhy1", "123", "localhost", 27017, "lhy"); 
		MongoClientURI uri = new MongoClientURI(sURI); 
		MongoClient mongoClient = new MongoClient(uri); 
		MongoDatabase db = mongoClient.getDatabase("lhy");
		MongoCollection<Document> users = db.getCollection("lhy");
		Document document = new Document();
		document.append("aaa", "lei");
		document.append("bbb", "sichuan chengdu");
		users.insertOne(document);
		mongoClient.close();
	}
	/**
	 * 第二种认证方式
	 * @throws UnknownHostException
	 */
	public static void auth2() throws UnknownHostException{
		
		MongoClientOptions.Builder build = new MongoClientOptions.Builder();
		// 与数据最大连接数50
		build.connectionsPerHost(50);
		// 如果当前所有的connection都在使用中,则每个connection上可以有50个线程排队等待
		build.threadsAllowedToBlockForConnectionMultiplier(50);
		build.connectTimeout(1 * 60 * 1000);
		build.maxWaitTime(2 * 60 * 1000);

		MongoClientOptions options = build.build();
		MongoCredential crclientedentials = MongoCredential
				.createScramSha1Credential("lhy1", "lhy", "123".toCharArray());
		List<MongoCredential> credentialsList = new ArrayList<MongoCredential>();
		credentialsList.add(crclientedentials);//凭证列表,英文一个数据库中可能有多个账号密码
		InetAddress inetAddress=InetAddress.getByName("127.0.0.1");
		ServerAddress addr=new ServerAddress(inetAddress, 27017);//设置地址
		MongoClient client = new MongoClient(addr, credentialsList, options);

		// 获取数据库test,不存在的话,会自动建立该数据库
		MongoDatabase db = client.getDatabase("lhy");

		// 获取data集合,不存在的话,会自动建立该集合(相当于关系数据库中的数据表)
		MongoCollection<Document> users = db.getCollection("lhy");
		Document document = new Document();
		document.append("firstName", "lei");
		document.append("address", "sichuan chengdu");
		users.insertOne(document);
		// MongoClient使用完后必须要close释放资源
		client.close();
	}
	public static void main(String args[]) throws UnknownHostException {
		auth1();
	}
}

增加

import java.util.ArrayList;
import java.util.List;

import org.bson.Document;

import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;


public class M_Insert {
	
	/**
	 * 单个插入
	 */
	public static void insert_1(){
		
		MongoClient client=Auth_no.getClient("127.0.0.1", 2222);
		// 获取data集合,不存在的话,会自动建立该集合(相当于关系数据库中的数据表)
		MongoDatabase db = client.getDatabase("lhy");
		MongoCollection<Document> collection = db.getCollection("lhy");
		Document document = new Document();
		document.append("name", "ddd  aaa");
		document.append("age", "lhy gggg");
		collection.insertOne(document);
		
		

		// MongoClient使用完后必须要close释放资源
		client.close();
	}
	
	/**
	 * 批量插入
	 */
	public static void insert_2(){
		
		MongoClient client=Auth_no.getClient("127.0.0.1", 2222);
		// 获取data集合,不存在的话,会自动建立该集合(相当于关系数据库中的数据表)
		MongoDatabase db = client.getDatabase("lhy");
		MongoCollection<Document> collection = db.getCollection("lhy");
		//创建一个包含多个文档的列表
		 List<Document> documents = new ArrayList<Document>();
		 for (int i = 0; i < 100; i++) {
		 documents.add(new Document("i", i));
		 }
		//  向文档中插入列表
		 collection.insertMany(documents);

	}
	public static void main(String[] args) {
		insert_1();
	}

}

删除

import static com.mongodb.client.model.Filters.eq;
import static com.mongodb.client.model.Filters.gte;

import org.bson.Document;

import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.result.DeleteResult;


public class M_Delete {

	
	public static void delete_1(){
		MongoClient client=Auth_no.getClient("127.0.0.1", 2222);
		// 获取data集合,不存在的话,会自动建立该集合(相当于关系数据库中的数据表)
		MongoDatabase db = client.getDatabase("lhy");
		MongoCollection<Document> collection = db.getCollection("lhy");
		// 删除第一个符合条件的数据
		 collection.deleteOne(eq("name", "lhy"));
		//  获取全部文档,可以看到没有110这个数了
		 for (Document cur : collection.find()) {
		 System.out.println(cur.toJson());
		 }

		// 删除所有符合条件的数据,并且返回结果
		 DeleteResult deleteResult = collection.deleteMany(gte("i", 100));
		//  输出删除的行数
		 System.out.println(deleteResult.getDeletedCount());
		//  获取全部文档,所有i>=100的数据都没了
		 for (Document cur : collection.find()) {
		 System.out.println(cur.toJson());
		 }
	}
	
	
	public static void main(String[] args) {
		MongoClient client=Auth_no.getClient("127.0.0.1", 2222);
		// 获取data集合,不存在的话,会自动建立该集合(相当于关系数据库中的数据表)
		MongoDatabase db = client.getDatabase("lhy");
		MongoCollection<Document> collection = db.getCollection("lhy");
		collection.drop();
	}
}

修改

import static com.mongodb.client.model.Filters.eq;
import static com.mongodb.client.model.Filters.gte;
import static com.mongodb.client.model.Filters.lt;

import org.bson.Document;

import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;


public class M_Update {
	/* 修改时的参数:
	 $inc 对指定的元素加
	 $mul 乘
	 $rename 修改元素名称
	 $setOnInsert 如果以前没有这个元素则增加这个元素,否则不作任何更改
	 $set 修改制定元素的值
	 $unset 移除特定的元素
	 $min 如果原始数据更大则不修改,否则修改为指定的值
	 $max 与$min相反
	 $currentDate 修改为目前的时间*/
	public static void update_1()
	{
		MongoClient client=Auth_no.getClient("127.0.0.1", 2222);
		// 获取data集合,不存在的话,会自动建立该集合(相当于关系数据库中的数据表)
		MongoDatabase db = client.getDatabase("lhy");
		MongoCollection<Document> collection = db.getCollection("lhy");
		// 修改第一个符合条件的数据
		// $set 为修改
		 collection.updateOne(eq("i", 10), new Document("$set", new
		 Document("i", 110)));
		//  获取全部文档,可以看到以前10的地方变成了110
		 for (Document cur : collection.find()) {
		 System.out.println(cur.toJson());
		 }

		// 批量修改数据并且返回修改的结果,讲所有小于100的结果都加100
		 UpdateResult updateResult = collection.updateMany(lt("i", 100),
		 new Document("$inc", new Document("i", 100)));
		//  显示发生变化的行数
		 System.out.println(updateResult.getModifiedCount());
		//  获取全部文档,可以看到除了刚才修改的110其他的全为了100
		 for (Document cur : collection.find()) {
		 System.out.println(cur.toJson());
		 }

		
	}
	public static void main(String[] args) {
		
	}
}

查询

import static com.mongodb.client.model.Filters.and;
import static com.mongodb.client.model.Filters.eq;
import static com.mongodb.client.model.Filters.exists;
import static com.mongodb.client.model.Filters.gt;
import static com.mongodb.client.model.Filters.lte;

import org.bson.Document;

import com.mongodb.BasicDBObject;
import com.mongodb.Block;
import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;


public class M_Query {

	public static void query_1(){
		MongoClient client=Auth_no.getClient("127.0.0.1", 2222);
		// 获取data集合,不存在的话,会自动建立该集合(相当于关系数据库中的数据表)
		MongoDatabase db = client.getDatabase("lhy");
		MongoCollection<Document> collection = db.getCollection("lhy");
		 // 显示集合中的文档的数量
		 System.out.println(collection.count());
		
		//  查询集合中的第一个文档
		 Document myDoc = collection.find().first();
		 System.out.println(myDoc.toJson());
		
		 //遍历文档   1 
		 for (Document cur : collection.find()) {
			 System.out.println(cur.toJson());
			 }
		 
		// 遍历文档  2
		 MongoCursor<Document> cursor = collection.find().iterator();
		 try {
		 while (cursor.hasNext()) {
		 System.out.println(cursor.next().toJson());
		 }
		 } finally {
		 cursor.close();
		 }
	}
	
	/**
	 * 条件查询
	 */
	public static void query_2(){
		MongoClient client=Auth_no.getClient("127.0.0.1", 2222);
		// 获取data集合,不存在的话,会自动建立该集合(相当于关系数据库中的数据表)
		MongoDatabase db = client.getDatabase("lhy");
		MongoCollection<Document> collection = db.getCollection("lhy");

			//  根据条件获取某分文档 eq:==
			 Document myDoc = collection.find(eq("i", 71)).first();
			 System.out.println(myDoc.toJson());

			// 通过查询语句一次性获取多个数据
			 Block<Document> printBlock = new Block<Document>() {
			 @Override
			 public void apply(final Document document) {
			 System.out.println(document.toJson());
			 }
			 };
			// 获得所有大于50的
			 collection.find(gt("i", 50)).forEach(printBlock);
			// 大于50 小于 100
			 collection.find(and(gt("i", 50), lte("i", 100))).forEach(printBlock);

			 //对输出文档进行排序,-1为递减,1为递增
			// 官方文档的例子有误:http:mongodb.github.io/mongo-java-driver/3.0/driver/getting-started/quick-tour/#sorting-documents
			 Document myDoc1 = collection.find(exists("i"))
			 .sort(new BasicDBObject("i", -1)).first();
			 System.out.println(myDoc1.toJson());

			// 选择性输出结果中的元素,0为不显示,1为显示
			// 官方文档中的例子又不能用:http:mongodb.github.io/mongo-java-driver/3.0/driver/getting-started/quick-tour/#projecting-fields
			 BasicDBObject exclude = new BasicDBObject();
			 exclude.append("_id", 0);
			  exclude.append("count", 0);
			 exclude.append("name", 1);
			 exclude.append("info", 1);
			 Document myDoc2 = collection.find().projection(exclude).first();
			 System.out.println(myDoc2.toJson());
		
	}
	public static void main(String[] args) {
	
		
	}
}

多语句执行

import static com.mongodb.client.model.Filters.eq;
import static com.mongodb.client.model.Filters.gte;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.bson.Document;

import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.BulkWriteOptions;
import com.mongodb.client.model.DeleteOneModel;
import com.mongodb.client.model.InsertOneModel;
import com.mongodb.client.model.ReplaceOneModel;
import com.mongodb.client.model.UpdateOneModel;
import com.mongodb.client.model.WriteModel;
import com.mongodb.client.result.DeleteResult;


public class M_builk {

	/**
	 * 按顺序执行
	 */
	public static void builk_1(){
		MongoClient client=Auth_no.getClient("127.0.0.1", 2222);
		// 获取data集合,不存在的话,会自动建立该集合(相当于关系数据库中的数据表)
		MongoDatabase db = client.getDatabase("lhy");
		MongoCollection<Document> collection = db.getCollection("lhy");
	
		// 按照语句先后顺序执行
		List list=new ArrayList();
		list.add(new InsertOneModel(new Document("name", 4)));
		list.add(new InsertOneModel(new Document("name", 5)));
		list.add(new UpdateOneModel(new Document("name", 4),new Document("$set", new Document("x", 2))));
		list.add(new DeleteOneModel(new Document("name", 5)));
	
		 collection.bulkWrite(list);
		 // 获取全部文档
		 for (Document cur : collection.find()) {
		 System.out.println(cur.toJson());
		 }

		
	}
	
	/**
	 * 不按顺序执行
	 */
	public static void builk_2(){
		MongoClient client=Auth_no.getClient("127.0.0.1", 2222);
		// 获取data集合,不存在的话,会自动建立该集合(相当于关系数据库中的数据表)
		MongoDatabase db = client.getDatabase("lhy");
		MongoCollection<Document> collection = db.getCollection("lhy");

		/**
		 * 不按先手顺序执行
		 */
		List list=new ArrayList();
		list.add(new InsertOneModel(new Document("name", 4)));
		list.add(new InsertOneModel(new Document("name", 5)));
		list.add(new UpdateOneModel(new Document("name", 4),new Document("$set", new Document("x", 2))));
		list.add(new DeleteOneModel(new Document("name", 5)));
	
		 collection.bulkWrite(list, new BulkWriteOptions().ordered(false));
		// 获取全部文档
		 for (Document cur : collection.find()) {
		 System.out.println(cur.toJson());
		 }
	}
	
	
	public static void main(String[] args) {
		builk_1();
	}
}



相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
3月前
|
Oracle JavaScript Java
JDK的版本迭代特性(JDK9 - JDK20)
JDK的版本迭代特性(JDK9 - JDK20)
|
4月前
|
Java Maven
[Java ] jdk升级 bug java: -source 8 中不支持 instanceof 中的模式匹配 (请使用 -source 16 或更高版本以启用 instanceof 中的模式匹配)
[Java ] jdk升级 bug java: -source 8 中不支持 instanceof 中的模式匹配 (请使用 -source 16 或更高版本以启用 instanceof 中的模式匹配)
136 0
|
8天前
|
Oracle Java 关系型数据库
Java 开发者必备:JDK 版本详解与选择策略(含安装与验证)
Oracle Java SE 支持路线图显示,JDK 8(LTS)支持至2030年,非LTS版本如9-11每6个月发布且支持有限。JDK 11(LTS)支持至2032年,而JDK 17及以上版本现在提供免费商用许可。LTS版本提供长达8年的支持,每2年发布一次。Oracle JDK与OpenJDK有多个社区和公司构建版本,如Adoptium、Amazon Corretto和Azul Zulu,它们在许可证、商业支持和更新方面有所不同。个人选择JDK时,可考虑稳定性、LTS、第三方兼容性和提供商支持。
23 0
|
24天前
|
Java
java中jar启动设置内存大小java -jar 设置堆栈内存大小
java中jar启动设置内存大小java -jar 设置堆栈内存大小
11 1
|
1月前
|
Java API 计算机视觉
java实现人脸识别V3版本开发
java实现人脸识别V3版本开发
17 0
|
1月前
|
Oracle Java 关系型数据库
【问题】Cause: java.sql.SQLException: 不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK
【问题】Cause: java.sql.SQLException: 不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK
|
1月前
|
Java
916.【Java】javap 查看 class 文件的jdk编译版本
916.【Java】javap 查看 class 文件的jdk编译版本
49 2
|
1月前
|
Java 应用服务中间件
解决tomcat启动报错:无法在web.xml或使用此应用程序部署的jar文件中解析绝对的url [http:java.sun.com/jsp/jstl/core]
解决tomcat启动报错:无法在web.xml或使用此应用程序部署的jar文件中解析绝对的url [http:java.sun.com/jsp/jstl/core]
131 1
|
2月前
|
算法 Java
蓝桥杯算法题——题解Java版本——切面条
蓝桥杯算法题——题解Java版本——切面条
35 0
|
2月前
|
Java
杨辉三角形(二维坐标基础题)——Java-二维数组版本
杨辉三角形(二维坐标基础题)——Java-二维数组版本
19 0