`
Everyday都不同
  • 浏览: 725016 次
  • 性别: Icon_minigender_1
  • 来自: 宇宙
社区版块
存档分类
最新评论

Mongodb 的CRUD操作(Java API 3.0+)

阅读更多

最近在学习使用Mongodb,众所周知:Mongodb是一种最接近传统关系型数据库的Nosql产品,利用它可以实现最基本的CRUD(增删改查)操作。下面是我小结的关于Mongodb的Java版的增删改查的操作,用到的mongodb版本是3.0+。

首先,引入mongo-java-driver-3.2.2.jar包,新建一个测试类如下:

package test;

import java.util.HashMap;
import java.util.Map;

import org.bson.Document;

import com.mongodb.BasicDBObject;
import com.mongodb.BulkWriteOperation;
import com.mongodb.DBCollection;
import com.mongodb.MongoClient;
import com.mongodb.QueryOperators;
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.Filters;
/**
 * Mongodb API for Java
 * Basic CRUD
 * @author Connor
 *
 */
public class MongoTest {
	public static void main(String[] args) {
		MongoClient mc = new MongoClient("localhost", 27017);//MongoClient线程安全的
		
		try{
			//先连接数据库,不存在的话会自动创建
			MongoDatabase db = mc.getDatabase("test");
			//再连接集合(表)
			MongoCollection<Document> colleciton = db.getCollection("foo");
			
			/**  query相关  */
			
			//无条件遍历表
			//1)通过游标
			MongoCursor<Document> cursor = colleciton.find().iterator();
			while(cursor.hasNext()) {
				Document doc = cursor.next();
				System.out.println("json:" + doc.toJson());
			}
			cursor.close();
			System.out.println("========================");
			
			//2)
			for(Document doc : colleciton.find()) {
//				System.out.println("json2:" + doc.toJson());
			}
			//查找userName以Connor打头,age>20的(含正则表达式)
			cursor = colleciton.find(Filters.and(Filters.gte("age", 20),
					Filters.regex("userName", "^Connor"))).iterator();
			while(cursor.hasNext()) {
				Document doc = cursor.next();
				System.out.println("json:" + doc.toJson());
			}
			cursor.close();
			System.out.println("==================================");
			
			//比较适合数字范围查询(不加.append的部分就是单条件查询)
			FindIterable<Document> iter = colleciton.find(new BasicDBObject("age", new BasicDBObject("$gt", 20)
					.append("$lt", 30)));//colleciton.find().limit(n)则表明取全部记录的前n条
			MongoCursor<Document> cursor2 = iter.iterator();
			while(cursor2.hasNext()) {
				Document doc = cursor2.next();
				System.out.println("符合条件的:" + doc.toJson());
			}
			cursor2.close();
			System.out.println("======================");
			
			//查找email = chun_@126.com的
			iter = colleciton.find(new BasicDBObject("email", "chun_@126.com"));
			cursor2 = iter.iterator();
			while(cursor2.hasNext()) {
				Document doc = cursor2.next();
				System.out.println("符合条件的2:" + doc.toJson());
			}
			cursor2.close();
			System.out.println("=========================");
			
			//查找email != chun_@126.com的
			iter = colleciton.find(new BasicDBObject("email", new BasicDBObject("$ne", "chun_@126.com")));
			cursor2 = iter.iterator();
			while(cursor2.hasNext()) {
				Document doc = cursor2.next();
				System.out.println("符合条件的3:" + doc.toJson());
			}
			cursor2.close();
			System.out.println("=======================");
			
			//查询userName在Connor2, Someone中的
			iter = colleciton.find(new BasicDBObject("userName", new BasicDBObject(QueryOperators.IN, 
					new String[]{"Connor2", "Someone"})));
			cursor2 = iter.iterator();
			while(cursor2.hasNext()) {
				Document doc = cursor2.next();
				System.out.println("符合条件的4:" + doc.toJson());
			}
			cursor2.close();
			System.out.println("========================");
			
			
			/**  insert相关  */
			Map<String, Object> map = new HashMap<>();
			map.put("name", "Fanfan");
			map.put("gender", "female");
			map.put("profession", "singer");
			map.put("nationality", "Taiwan");
			map.put("age", 38);
			Document doc = new Document(map);
			colleciton.insertOne(doc);
			//insert多条
//			List<Document> list = new ArrayList<Document>();
//			list.add(doc);
//			colleciton.insertMany(list);
			
			//不再推荐的用法
			DBCollection coll = mc.getDB("test").getCollection("foo");
			BulkWriteOperation builder = coll.initializeOrderedBulkOperation();
			BasicDBObject obj = new BasicDBObject("name", "Fanfan").append("gender", "female").append("age", 35)
					.append("profession", "singer").append("nationality", "Taiwan");
			//或者BasicDBObject obj = new BasicDBObject(map);
			builder.insert(obj);
			
			//测试
			cursor = colleciton.find().iterator();
			while(cursor.hasNext()) {
				doc = cursor.next();
				System.out.println("json(new):" + doc.toJson());
			}
			cursor.close();
			System.out.println("========================");
			
			/**  update相关  */
//			map.put("nationality", "Taiwan");
//			BasicDBObject newObj = new BasicDBObject(map);
//			colleciton.updateOne(new BasicDBObject("nationality", new BasicDBObject("eq", "Taiwan")), 
//					new BasicDBObject("nationality", "Chinese"));
			
			
			 BasicDBObject condition = new BasicDBObject();
			 condition.put("name", "Fanfan");
		     BasicDBObject update = new BasicDBObject();
		     update.put("nationality", "Chinese");
		     BasicDBObject setObj = new BasicDBObject("$set", update);
		     
		     /*
		      * update xxx  set age = age +2, name =  where ... 
		     BasicDBObject incObj = new BasicDBObject("age", 2);
		     BasicDBObject setObj2 = new BasicDBObject("name", "Fanweiqi");
		     BasicDBObject allObj = new BasicDBObject();
		     allObj.put("$inc", incObj);
		     allObj.put("$set", setObj2);
		     colleciton.updateMany(condition, allObj);*/
		     
		     colleciton.updateOne(condition, setObj);
		     
			cursor = colleciton.find().iterator();
			while(cursor.hasNext()) {
				doc = cursor.next();
				System.out.println("json(new2):" + doc.toJson());
			}
			cursor.close();
			System.out.println("========================");
			
			
			/**  delete相关  */
//			coll.remove(obj);
//			colleciton.findOneAndDelete(new BasicDBObject("name", "Fanfan"));//只能删除一条
			colleciton.deleteMany(new BasicDBObject("name", "Fanfan"));//删除所有符合条件的
//			colleciton.deleteMany(new BasicDBObject("age", new BasicDBObject("$gt", 20)
//					.append("$lt", 30)));//删除20<age<30的记录
			cursor = colleciton.find().iterator();
			while(cursor.hasNext()) {
				doc = cursor.next();
				System.out.println("json(new3):" + doc.toJson());
			}
			cursor.close();
			System.out.println("========================");
			
			
			
		} catch(Exception e) {
			e.printStackTrace();
		}
		
	}
}

 

mongoClient的连接池写法:

List<ServerAddress> saList = new ArrayList<ServerAddress>();
		if(mongoClient == null){
			MongoClientOptions.Builder builder = new MongoClientOptions.Builder();
			builder.connectionsPerHost(50);//与目标数据库能够建立的最大connection数量为50
			builder.autoConnectRetry(true);//自动重连数据库启动
			//如果当前所有的connection都在使用中,则每个connection上可以有50个线程排队等待
			builder.threadsAllowedToBlockForConnectionMultiplier(50);
			//如果当前所有的connection都在使用中,则每个connection上可以有50个线程排队等待
			builder.maxWaitTime(1000*60*2);
			//与数据库建立连接的timeout设置为1分钟
			builder.connectTimeout(1000*60*1);
			MongoClientOptions clientOptions = builder.build();
			try {
				//数据库连接实例
				ServerAddress address1 = new ServerAddress(MongoDbUtils.MONGO_IP, MongoDbUtils.MONGO_PORT);
				saList.add(address1);
				mongoClient = new MongoClient(saList, clientOptions);
			} catch (UnknownHostException e) {
				e.printStackTrace();
			}
		}

 

 

持续补充完善中……

0
0
分享到:
评论

相关推荐

    mongoDB DAO层封装

    在MongoDB DAO层封装中,这些操作被封装成易于使用的API,例如,通过`save()`方法创建或更新文档,`findAll()`方法获取所有文档,`findById()`方法根据ID读取文档,以及`deleteById()`方法删除指定ID的文档。...

    MongoDB可视化客户端工具和Java开发所需mongo-2.8.0.jar

    MongoDB提供了多种语言的驱动程序,Java驱动是其中之一,允许开发者在Java环境中执行CRUD(创建、读取、更新、删除)操作。这个特定的版本2.8.0可能包含了对MongoDB服务器2.6.x至3.0.x版本的支持。使用`mongo-2.8.0....

    springMongodb参考文档中文版

    - Fluent Collection API用于CRUD和聚合操作。 #### 6. 依赖 - **Spring Boot的依赖管理**:Spring Boot简化了项目中依赖项的管理和配置。 - **Spring框架**:Spring框架提供了核心的功能和服务,如依赖注入、事务...

    school-rest-api

    学校休息-api 具有 CRUD 功能的基于 Spring Boot 的 RESTful API。 数据库:MongoDB 应用结构: ... Maven 3.0+ MongoDB 在默认端口上运行 如何运行这个应用程序: mvn clean spring-boot:run

    MongoDB 3.0.1 jar包

    MongoDB 3.0.1 jar包是针对MongoDB数据库的一个Java驱动程序,它使得Java开发者能够方便地在他们的应用程序中集成和操作MongoDB。这个jar包由三个核心组件组成,分别是`mongodb-driver-3.0.1.jar`、`mongodb-driver-...

    vali-admin-maste

    Mongo-Java-Driver则是Java应用程序与MongoDB交互的官方驱动,通过它,开发者可以执行CRUD操作,进行聚合查询等。 5. **模版**:在Web开发中,模版通常指的是用于渲染动态内容的静态文件。例如,Thymeleaf、...

    jedis-2.9.0.jar和mongo-java-driver-3.0.2.jar

    这个驱动程序让开发者能够通过Java代码执行CRUD(创建、读取、更新、删除)操作,进行聚合框架查询,以及利用MongoDB的其他高级特性。3.0.2版本可能包含了对MongoDB服务器3.x系列的优化和支持,同时也修复了一些已知...

    spring第一次课笔记

    6. **Spring Data**:这一模块简化了数据访问,包括对NoSQL数据库的支持,如MongoDB,以及对JPA(Java Persistence API)的增强,提供了统一的CRUD操作和查询方法。 7. **Spring Security**:提供了一套全面的安全...

    Spring框架的运用

    - **Java配置**:Spring 3.0引入了Java配置,可以在Java类中定义配置,增强了代码的可读性和可测试性。 3. **Spring MVC**:Spring MVC是Spring框架的一部分,提供了一个用于构建Web应用的模型-视图-控制器(MVC)...

    ImageUploadApp

    而如果是非关系型数据库,例如MongoDB,Java的MongoDB驱动程序将用于进行CRUD(创建、读取、更新和删除)操作。 在文件存储方面,ImageUploadApp可能会将图片保存在服务器的文件系统中,或者使用云存储服务如Amazon...

Global site tag (gtag.js) - Google Analytics