java操作MongoDB


package per.czt.weknow.test;

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

import org.bson.BSON;
import org.bson.BSONObject;
import org.bson.BasicBSONObject;
import org.bson.BsonArray;
import org.bson.Document;
import org.bson.conversions.Bson;

import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoClientOptions.Builder;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.WriteConcern;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.CreateCollectionOptions;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.Projections;
import com.mysql.cj.x.protobuf.MysqlxCrud.Projection;

import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.statement.update.Update;

public class MongoDBJDBC {
	private static MongoClient mongoclient;
	static {
		// 获取MongoDB服务器地址
		ServerAddress serverAddress = new ServerAddress("localhost", 27017);
		// System.out.println("serverAddress:"+serverAddress);
		List<ServerAddress> addrs = new ArrayList<ServerAddress>();
		addrs.add(serverAddress);

		MongoCredential credential = MongoCredential.createCredential("root", "admin", "123456".toCharArray());
		// System.out.println("credential:"+credential);
		List<MongoCredential> credentials = new ArrayList<MongoCredential>();
		credentials.add(credential);

		// 通过连接认证获取数据库连接
		mongoclient = new MongoClient(addrs, credentials);
		// 连接到数据库
		Builder options = MongoClientOptions.builder();
		options.connectionsPerHost(300);// 连接池设置为300个连接,默认100
		options.connectTimeout(3000);// 连接超时推荐3000毫秒
		options.maxWaitTime(5000);
		options.socketTimeout(0);// 套接字超时时间,0无限制
		options.threadsAllowedToBlockForConnectionMultiplier(5000);// 线程队列数,如果连接线程排满了队列就会抛出“Out of semaphores to get
																	// db”错误
		options.writeConcern(WriteConcern.SAFE);
		options.build();
	}

	// 获取数据库
	public static MongoDatabase getDatabase(String databaseName) {

		if (databaseName != null && !databaseName.equals("")) {
			MongoDatabase mongoDatabase = mongoclient.getDatabase(databaseName);
			return mongoDatabase;
		}
		return null;
	}

	public static void queryTest(MongoCollection mongoCollection) {

		// 查询所有文档
		FindIterable<Document> documents1 = mongoCollection.find();
		for (Document document : documents1) {
			/*
			 * System.out.println("name: "+ document.get("name"));
			 * System.out.println("age: "+ document.get("age"));
			 */
			System.out.println("json1: " + document.toJson());
		}
		FindIterable<Document> documents2 = mongoCollection.find().skip(20).limit(5).sort(null);
		for (Document document : documents2) {
			/*
			 * System.out.println("name: "+ document.get("name"));
			 * System.out.println("age: "+ document.get("age"));
			 */
			System.out.println("json2: " + document.toJson());
		}

		/*
		 * BSONObject obj3=new BasicBSONObject(); obj3.put("name", "user1");
		 */
		// 查询name为user1的文档
		FindIterable<Document> documents3 = mongoCollection.find(Filters.and(Filters.eq("name", "user1")));
		for (Document document : documents3) {
			/*
			 * System.out.println("name: "+ document.get("name"));
			 * System.out.println("age: "+ document.get("age"));
			 */
			System.out.println("json3: " + document.toJson());
		}
		// 查询所有记录按年龄逆序
		FindIterable<Document> documents4 = mongoCollection.find().sort(new Document("age", -1));
		for (Document document : documents4) {
			/*
			 * System.out.println("name: "+ document.get("name"));
			 * System.out.println("age: "+ document.get("age"));
			 */
			System.out.println("json4: " + document.toJson());
		}

		FindIterable<Document> documents5 = mongoCollection.find(Filters.ne("name", "user87"))
				.sort(new Document("age", -1)).skip(3).limit(10).batchSize(10);
		for (Document document : documents5) {
			/*
			 * System.out.println("name: "+ document.get("name"));
			 * System.out.println("age: "+ document.get("age"));
			 */
			System.out.println("json5: " + document.toJson());
		}

		FindIterable<Document> documents6 = mongoCollection.find(Filters.exists("address"));
		;
		for (Document document : documents6) {
			/*
			 * System.out.println("name: "+ document.get("name"));
			 * System.out.println("age: "+ document.get("age"));
			 */
			System.out.println("json6: " + document.toJson());
		}
		FindIterable<Document> documents7 = mongoCollection.find(Filters.gt("age", 4));
		for (Document document : documents7) {
			/*
			 * System.out.println("name: "+ document.get("name"));
			 * System.out.println("age: "+ document.get("age"));
			 */
			System.out.println("json7: " + document.toJson());
		}
		// 多个条件的查询
		FindIterable<Document> documents8 = mongoCollection
				.find(Filters.and(Filters.ne("age", 5), Filters.exists("address", true), Filters.ne("name", "users0")));
		for (Document document : documents8) {
			/*
			 * System.out.println("name: "+ document.get("name"));
			 * System.out.println("age: "+ document.get("age"));
			 */
			System.out.println("json8: " + document.toJson());
		}

		FindIterable<Document> documents9 = mongoCollection.find();
		for (Document document : documents9) {
			/*
			 * System.out.println("name: "+ document.get("name"));
			 * System.out.println("age: "+ document.get("age"));
			 */
			System.out.println("json9: " + document.toJson());
		}
		// 显示address属性
		MongoCursor<Document> documentIterator = mongoCollection.find()
				.projection(Projections.fields(Projections.include("address"))).iterator();
		while (documentIterator.hasNext()) {
			Document document = documentIterator.next();

			System.out.println("json10:" + document.toJson());
		}
		// 去掉_id

		MongoCursor<Document> documentIterator2 = mongoCollection.find()
				.projection(Projections.fields(Projections.excludeId())).iterator();
		while (documentIterator2.hasNext()) {
			Document document = documentIterator2.next();

			System.out.println("json11:" + document.toJson());
		}
		// 去掉id并且显示有地址的
		MongoCursor<Document> documentIterator3 = mongoCollection.find()
				.projection(Projections.fields(Projections.excludeId(), Projections.include("address"))).iterator();
		while (documentIterator3.hasNext()) {
			Document document = documentIterator3.next();

			System.out.println("json12:" + document.toJson());
		}

		// elemMatch使用
		MongoCursor<Document> documentIterator4 = mongoCollection
				.find(Projections.fields(Projections.elemMatch("students",
						Filters.and(Filters.eq("name", "Joe"), Filters.eq("school", 122)))))
				.projection(Projections.fields(Projections.elemMatch("students",
						Filters.and(Filters.eq("name", "Joe"), Filters.eq("school", 122)))))
				.iterator();
		while (documentIterator4.hasNext()) {
			Document document = documentIterator4.next();

			System.out.println("json13:" + document.toJson());
		}

	}

	// 插入文档
	public static void insertDocuemnt(MongoCollection mongoCollection)
	{
		
	/*	document1.put("name", "Sarch1");
		document1.put("age", 23);*/
		/*Document document1=new Document("name","fsgsg").append("age", 3).append("asss", "aaaa").append("array", Arrays.asList(Arrays.asList(1,2,3),"2","3"));
		Document document2=new Document();
		document2.put("name", "Sarch2");
		document2.put("age", 43);
		try
		{
			//插入一个文档
			mongoCollection.insertOne(document1);
			
			//插入多个文档
			List<Document> documents=new ArrayList<Document>();
			documents.add(document1);
			documents.add(document2);
			
			mongoCollection.insertMany(documents);
		
			System.out.println("添加成功");
			
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}*/
		try
		{
		    for(int i=0;i<1000;i++)
		    {
		    	mongoCollection.insertOne(new Document("id",1).append("chapter",i).append("title","title"+i).append("content", "content"+i));
		    }
		    System.out.println("添加成功");
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}

	// 删除文档
	public static void deleteDocument(MongoCollection mongoCollection) {
		try {
			// 删除一条记录
			// mongoCollection.deleteOne(Filters.eq("name", "users1"));
			// 删除多条记录
			mongoCollection.deleteMany(Filters.or(Filters.eq("name", "Sarch1"), Filters.eq("name", "Sarch2")));
			System.out.println("删除成功!");
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	// 更新文档
	public static void updateDocument(MongoCollection mongoCollection) {
		try {

			// 更新文档
			mongoCollection.updateMany(Filters.and(Filters.eq("name", "users4"), Filters.eq("age", 4)),
					new Document("$set", new Document("title", "1")));

			System.out.println("更新成功!");
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	// 获取集合
	public static MongoCollection<Document> getCollection(MongoDatabase mongoDatabase, String collectionName) {
		if (collectionName != null && !collectionName.equals("")) {
			MongoCollection<Document> mongoCollection = mongoDatabase.getCollection(collectionName);
			return mongoCollection;
		}
		return null;
	}

	// 创建集合
	public static int createCollection(MongoDatabase mongoDatabase, String colectionName, Boolean capped,
			int documentSize, int bytes) {

		try {
			mongoDatabase.createCollection(colectionName,
					new CreateCollectionOptions().capped(capped).maxDocuments(documentSize).sizeInBytes(bytes));
			return 1;

		} catch (Exception e) {
			return 0;
		}

	}

	// 删除集合
	public static void dropCollection(MongoDatabase mongoDatabase, String colectionName) {
		try {
			mongoDatabase.getCollection(colectionName).drop();
			System.out.println("删除成功!");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		MongoDatabase mongoDatabase = getDatabase("novel");
		// 创建集合

		/*
		 * mongoDatabase.createCollection("novel"); System.out.println("集合创建成功");
		 */

		// 获取集合
		MongoCollection<Document> mongoCollection = getCollection(mongoDatabase, "novel");
		// 获取集合文档数目
		// System.out.println("count:" + mongoCollection.count());
		/*
		 * int flag=createCollection(mongoDatabase,"user6",false,100,10000); if(flag==1)
		 * { System.out.printf("创建集合成功\n"); } else { System.out.printf("创建集合失败\n"); }
		 */
		// dropCollection(mongoDatabase, "user5");
		// queryTest(mongoCollection);
		insertDocuemnt(mongoCollection);
		// deleteDocument(mongoCollection);
		// updateDocument(mongoCollection);

	}

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值