mongo-java-driver 3.0版本学习例子 根据官网指南写的

官网指南地址 http://mongodb.github.io/mongo-java-driver/3.0/driver/getting-started/quick-tour/

例子目录结构


pom.xml

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <dependency>
	<groupId>org.mongodb</groupId>
		<artifactId>mongo-java-driver</artifactId>
		<version>3.0.3</version>
	</dependency>
  </dependencies>
mongodb.properties

mongodb.host=127.0.0.1
mongodb.port=
mongodb.replicaSet=
mongodb.connectionsPerHost=100
mongodb.threadsAllowedToBlockForConnectionMultiplier=5
mongodb.maxWaitTime=120000
mongodb.connectTimeout=60000
mongodb.socketTimeout=60000
mongodb.autoConnectRetry=true

mongodb连接配置

package mongodb.mongodb.test;

import java.util.ResourceBundle;

import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;

/**
 * mongodb连接配置工具类
 * @author wbq
 *
 */
public class MongoManager {
	 //MongoClient的实例代表数据库连接池,是线程安全的,可以被多线程共享,客户端在多线程条件下仅维持一个实例即可 
	 //Mongo是非线程安全的,目前mongodb API中已经建议用MongoClient替代Mongo 
	private MongoClient mongoClient = null;  
	
	private static MongoManager instance = null;
	
	private MongoManager(){
		//属性文件读取参数信息
		ResourceBundle bundle = ResourceBundle.getBundle("mongodb");
		
		MongoClientOptions.Builder build = new MongoClientOptions.Builder(); 
		//与目标数据库能够建立的最大connection数量,默认100
		build.connectionsPerHost(Integer.valueOf(bundle.getString("mongodb.connectionsPerHost")));
		build.threadsAllowedToBlockForConnectionMultiplier(Integer.valueOf(bundle.getString("mongodb.threadsAllowedToBlockForConnectionMultiplier")));
		/*
		 * 一个线程访问数据库的时候,在成功获取到一个可用数据库连接之前的最长等待时间为2分钟
		 * 这里比较危险,如果超过maxWaitTime都没有获取到这个连接的话,该线程就会抛出Exception
		 * 故这里设置的maxWaitTime应该足够大,以免由于排队线程过多造成的数据库访问失败
		 */
		build.maxWaitTime(Integer.valueOf(bundle.getString("mongodb.maxWaitTime")));  
		//与数据库建立连接的timeout设置为1分钟
		build.connectTimeout(Integer.valueOf(bundle.getString("mongodb.connectTimeout"))); 
		build.socketTimeout(Integer.valueOf(bundle.getString("mongodb.socketTimeout")));
		
		MongoClientOptions myOptions = build.build();
        //数据库连接实例  
        mongoClient = new MongoClient("127.0.0.1", myOptions);            
	}
	
	public static MongoManager getInstance(){
		if(instance ==null){
			instance = new MongoManager();
		}
		return instance;
	}
	
	public static MongoClient getMongoClient(){
		return MongoManager.getInstance().mongoClient;
	}
}

测试代码

package mongodb.mongodb.test;

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

import org.bson.Document;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

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

import static com.mongodb.client.model.Filters.*;
import static com.mongodb.client.model.Projections.*;
import static com.mongodb.client.model.Sorts.*;

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.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;

public class MongoTest {
	
	private MongoClient client = MongoManager.getMongoClient();
	private MongoDatabase md = client.getDatabase("local");
	private MongoCollection<Document> coll = null;
	
	//创建集合
	@Before
	public void create(){
		md.createCollection("test");
		coll = md.getCollection("test");
	}
	
	@Test
	public void run(){
		add();
		query();
		update();
		testDel();
		bulk();
	}
	
	//添加测试
	public void add(){
		
		//添加单条记录
		Document doc = new Document("name","MongoDB").append("type", "database").append("count", 1)
				.append("info", new Document("x", 203).append("y", 102));
		coll.insertOne(doc);
		
		//添加多条记录
		List<Document> list = new ArrayList<Document>();
		for(int i= 0 ;i< 100 ;i++){
			list.add(new Document("i", i));
		}
		coll.insertMany(list);
	}
	
	//查询
	public void query(){
		//查询第一条
		Document doc = coll.find().first();
		System.out.println(doc.toJson());
		
		//查询所有
		try(MongoCursor<Document> cursor = coll.find().iterator()){
			while(cursor.hasNext()){
				System.out.println(cursor.next().toJson());
			}
		}
		
		//过滤查询 单条
		doc = coll.find(eq("i", 71)).first();
		System.out.println(doc.toJson());
		//过滤查询 多条
		Block<Document> printBlock = new Block<Document>(){

			@Override
			public void apply(Document t) {
				System.out.println("i>50  "+t.toJson());
			}
		};
		coll.find(gt("i",50)).forEach(printBlock);
		//排除 降序 第一条数据
		doc = coll.find(exists("i")).sort(descending("i")).first();
		System.out.println("sort: " + doc.toJson());
		
		doc = coll.find().projection(excludeId()).first();
		System.out.println("excludeId: "+doc.toJson());
	}
	
	
	//更新测试
	public void update(){
		//更新单独记录
		coll.updateOne(eq("i","10"), new Document("$set",new Document("i", 110)));
		//跟新多条记录  $set 设置为指定值  $inc 原子性操作 将原来的加上 新值
		UpdateResult updateResult = coll.updateMany(lt("i", 100),new Document("$inc",new Document("i",100)));
		System.out.println("ModifiedCount:" + updateResult.getModifiedCount());
	}
	
	//删除测试
	public void testDel(){
		//删除单个 找到符合条件的第一个 删除
		coll.deleteOne(eq("i",110));
		//删除多个 只要符合条件就全部删除
		DeleteResult deleteResult = coll.deleteMany(gte("i",100));
		System.out.println("DeletedCount:"+deleteResult.getDeletedCount());
	}
	
	//批量操作
	public void bulk(){
		//有序
		coll.bulkWrite(
			Arrays.asList(new InsertOneModel<Document>(new Document("_id", 1)),
						  new InsertOneModel<Document>(new Document("_id", 2)),
						  new InsertOneModel<Document>(new Document("_id", 3)),
						  new UpdateOneModel<Document>(new Document("_id", 1),new Document("$set", new Document("x", 2))),
						  new DeleteOneModel<Document>(new Document("_id",2)),
						  new ReplaceOneModel<Document>(new Document("_id", 3), new Document("_id", 3).append("x",4))));
		//无序
		coll.bulkWrite(
				  Arrays.asList(new InsertOneModel<Document>(new Document("_id", 4)),
				                new InsertOneModel<Document>(new Document("_id", 5)),
				                new InsertOneModel<Document>(new Document("_id", 6)),
				                new UpdateOneModel<Document>(new Document("_id", 4),
				                                     new Document("$set", new Document("x", 2))),
				                new DeleteOneModel<Document>(new Document("_id", 5)),
				                new ReplaceOneModel<Document>(new Document("_id", 6),
				                                      new Document("_id", 6).append("x", 4))),
				  new BulkWriteOptions().ordered(false));
		
	}
	
	@After
	public void queryAll(){
		System.out.println(coll.count());
        FindIterable<Document> docs = coll.find();
        MongoCursor<Document> cur = docs.iterator();
        while(cur.hasNext()){
        	System.out.println(cur.next());
        }
        //删除集合
        coll.drop();
	}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值