最近在学习使用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(); } }
持续补充完善中……
相关推荐
在MongoDB DAO层封装中,这些操作被封装成易于使用的API,例如,通过`save()`方法创建或更新文档,`findAll()`方法获取所有文档,`findById()`方法根据ID读取文档,以及`deleteById()`方法删除指定ID的文档。...
MongoDB提供了多种语言的驱动程序,Java驱动是其中之一,允许开发者在Java环境中执行CRUD(创建、读取、更新、删除)操作。这个特定的版本2.8.0可能包含了对MongoDB服务器2.6.x至3.0.x版本的支持。使用`mongo-2.8.0....
- Fluent Collection API用于CRUD和聚合操作。 #### 6. 依赖 - **Spring Boot的依赖管理**:Spring Boot简化了项目中依赖项的管理和配置。 - **Spring框架**:Spring框架提供了核心的功能和服务,如依赖注入、事务...
学校休息-api 具有 CRUD 功能的基于 Spring Boot 的 RESTful API。 数据库:MongoDB 应用结构: ... Maven 3.0+ MongoDB 在默认端口上运行 如何运行这个应用程序: mvn clean spring-boot:run
MongoDB 3.0.1 jar包是针对MongoDB数据库的一个Java驱动程序,它使得Java开发者能够方便地在他们的应用程序中集成和操作MongoDB。这个jar包由三个核心组件组成,分别是`mongodb-driver-3.0.1.jar`、`mongodb-driver-...
Mongo-Java-Driver则是Java应用程序与MongoDB交互的官方驱动,通过它,开发者可以执行CRUD操作,进行聚合查询等。 5. **模版**:在Web开发中,模版通常指的是用于渲染动态内容的静态文件。例如,Thymeleaf、...
这个驱动程序让开发者能够通过Java代码执行CRUD(创建、读取、更新、删除)操作,进行聚合框架查询,以及利用MongoDB的其他高级特性。3.0.2版本可能包含了对MongoDB服务器3.x系列的优化和支持,同时也修复了一些已知...
6. **Spring Data**:这一模块简化了数据访问,包括对NoSQL数据库的支持,如MongoDB,以及对JPA(Java Persistence API)的增强,提供了统一的CRUD操作和查询方法。 7. **Spring Security**:提供了一套全面的安全...
- **Java配置**:Spring 3.0引入了Java配置,可以在Java类中定义配置,增强了代码的可读性和可测试性。 3. **Spring MVC**:Spring MVC是Spring框架的一部分,提供了一个用于构建Web应用的模型-视图-控制器(MVC)...
而如果是非关系型数据库,例如MongoDB,Java的MongoDB驱动程序将用于进行CRUD(创建、读取、更新和删除)操作。 在文件存储方面,ImageUploadApp可能会将图片保存在服务器的文件系统中,或者使用云存储服务如Amazon...