irpas技术客

Java中连接mongodb_爱打瞌睡沐小白_java连接mongodb

网络投稿 3893

Java中连接mongodb 创建一个空的Maven工程导入MongoDB连接驱动依赖 <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>3.12.7</version> </dependency> 测试java连接MongoDB是否成功 public static void main(String[] args) { // 创建连接对象 MongoClient client = new MongoClient("192.168.126.129", 27017); // 获取MongoDB的数据库 MongoDatabase advance = client.getDatabase("advance"); // 获取MongoDB的集合 MongoCollection<Document> adv = advance.getCollection("adv"); // 测试连接是否成功 System.out.println("ok"); } 封装连接MongoDB的util public class MongoDBUtil { private static MongoClient client = null; static { if(client==null){ client = new MongoClient("192.168.126.129",27017); } } // 获取MongoDB数据库 public static MongoDatabase getMongoDB(String dbName){ return client.getDatabase(dbName); } // 获取数据库的集合 public static MongoCollection getMongoCollection(String dbName,String collection){ MongoDatabase mongoDB = getMongoDB(dbName); return mongoDB.getCollection(collection); } } 创建封装有用户认证的mongodb连接 public class MongoDBAuthUtil { private static MongoClient cline=null; static { if(cline==null){ // 封装用户的认证信息createCredential(认证的用户名,创建认证用户所在的数据库,用户密码(char[]类型)) MongoCredential credential = MongoCredential.createCredential("mm1", "advance", "mm1pwd".toCharArray()); // 封装MongoDB的地址与端口 ServerAddress address = new ServerAddress("192.168.126.129", 27017); cline=new MongoClient(address, Arrays.asList(credential)); } } // 获取MongDB数据库 public static MongoDatabase getMongoDB(String dbName){ return cline.getDatabase(dbName); } // 获取MongoDB集合 public static MongoCollection getCollection(String dbName,String collName){ MongoDatabase mongoDB = getMongoDB(dbName); return mongoDB.getCollection(collName); } } 连接池的方式连接数据库 public class MongDBPoolUtil { private static MongoClient client=null; static { if (client == null){ MongoClientOptions.Builder builder = new MongoClientOptions.Builder(); builder.connectionsPerHost(10);//每个地址的最大连接数 builder.connectTimeout(5000);//连接超时时间 builder.socketTimeout(5000);//设置读写操作超时时间 ServerAddress address = new ServerAddress("192.168.126.129", 27017); //MongoClient(连接地址,连接池参数) client = new MongoClient(address,builder.build()); //如果是采用集群的模式部署可以使用此种方式来定义 //client = new MongoClient(Arrays.asList(address),builder.build()); } } public static MongoDatabase getMongoDB(String dbName){ return client.getDatabase(dbName); } public static MongoCollection getCollection(String dbName,String collName){ MongoDatabase mongoDB = getMongoDB(dbName); return mongoDB.getCollection(collName); } } 使用认证方式的池连接 public class MongoDBAuthPoolUtil { private static MongoClient client = null; static { if(client == null){ MongoClientOptions.Builder builder = new MongoClientOptions.Builder(); builder.connectionsPerHost(10);//设置连接池最大的连接数 builder.connectTimeout(5000);//连接超时时间 builder.socketTimeout(5000);//设置读写操作时间 MongoCredential credential = MongoCredential.createCredential("mm1", "advance", "mm1pwd".toCharArray()); ServerAddress address = new ServerAddress("192.168.126.129", 27017); client = new MongoClient(address,credential,builder.build()); } } public static MongoDatabase getMongoDB(String dbName){ return client.getDatabase(dbName); } public static MongoCollection getColllection(String dbName,String collName){ MongoDatabase mongoDB = getMongoDB(dbName); return mongoDB.getCollection(collName); } } java操作集合

1.封装创建集合的方法(注:集合不能反复创建,会抛异常)

public static void createCollection(String dbName,String collName){ MongoDatabase mongoDB = getMongoDB(dbName); mongoDB.createCollection(collName); }

2.封装获取集合的方法

public static MongoCollection getColllection(String dbName,String collName){ MongoDatabase mongoDB = getMongoDB(dbName); return mongoDB.getCollection(collName); }

3.删除集合的方法(注:封装该方法时,传入获取的集合)

public static void deleteCollection(MongoCollection mongoCollection){ mongoCollection.drop(); } java操作文档

1.添加文档 1.1添加单个文档

创建一个advtest集合 public void insertSingleDocument(){ // 获取集合 MongoCollection colllection = MongoDBAuthPoolUtil.getColllection("advance", "advtest"); System.out.println(colllection.getNamespace()); // {}--》Document对象 // append(String key,Object value) Document document = new Document(); Document mm1 = document.append("name", "mm2").append("age",4).append("addr", "湖北").append("amount",Arrays.asList(new Integer[] {1,2,3,4}));//注意此处不能是基本数据类型的数组 colllection.insertOne(mm1); System.out.println("ok"); }

1.2批量添加文档

public void insertManyDecument(){ // 获取集合 MongoCollection advtest = MongoDBAuthPoolUtil.getColllection("advance", "advtest"); List<Document> decumentLists = new ArrayList<>(); for (int i = 0; i <5 ; i++) { decumentLists.add(new Document().append("name", "mu"+i).append("age",i)); } advtest.insertMany(decumentLists); }

2.更新文档 2.1更新单个文档单个键

public void updateSingleDecument(){ MongoCollection advtest = MongoDBAuthPoolUtil.getColllection("advance", "advtest"); advtest.updateOne(Filters.eq("name","mu0"), new Document("$set",new Document("age",3))); }

2.2更新单个文档的多个键

public void updateSingleDecumentManyyKey(){ MongoCollection advtest = MongoDBAuthPoolUtil.getColllection("advance", "advtest"); advtest.updateOne(Filters.eq("name","mu0"),new Document("$set",new Document("age",18).append("gs", "meizu")) ); }

2.3更新多个文档的单个键

public void updateManyDecumentSingleKey(){ MongoCollection advtest = MongoDBAuthUtil.getCollection("advance", "advtest"); advtest.updateMany(Filters.ne("name", null), new Document("$set", new Document("amount", Arrays.asList(new Integer[]{1,2,3,4})))); System.out.println("ok"); }

2.4更新多个文档的多个键

public void updateManyDecumentManyKey(){ MongoCollection advtest = MongoDBAuthPoolUtil.getColllection("advance", "advtest"); advtest.updateMany(Filters.ne("name", null),new Document("$set", new Document("addr","安徽").append("action", "readWriter"))); System.out.println("ok"); }

2.5更新文档中的数组

public void updateDocumentArray(){ MongoCollection advtest = MongoDBAuthPoolUtil.getColllection("advance", "advtest"); advtest.updateMany(Filters.ne("name", null), new Document("$push", new Document("amount",1))); System.out.println("ok"); } 查询文档

1.1查询全部文档

public void selectDocumnetAll(){ MongoCollection advtest = MongoDBAuthPoolUtil.getColllection("advance", "advtest"); FindIterable<Document> findIterable = advtest.find(); //find()返回的是一个迭代器 MongoCursor<Document> iterator = findIterable.iterator(); while(iterator.hasNext()){ Document next = iterator.next(); System.out.println(next.get("name")+""+next.get("amount")); } }

1.2根据_id查询文档

public void selectDocumentBy_ID(){ MongoCollection advtest = MongoDBAuthPoolUtil.getColllection("advance", "advtest"); FindIterable id = advtest.find(Filters.eq("_id", new ObjectId("6188bd17ea623c1d41727851"))); MongoCursor iterator = id.iterator(); System.out.println(iterator.next()); }

1.3条件查询文档

public void selectDocumentGt(){ MongoCollection advtest = MongoDBAuthPoolUtil.getColllection("advance", "advtest"); FindIterable<Document> ages = advtest.find(Filters.and(Filters.gte("age", 3),Filters.eq("name","mm1"))); MongoCursor<Document> iterator = ages.iterator(); while (iterator.hasNext()){ Document next = iterator.next(); System.out.println(next); } }

1.4根据type查询文档

public void selectDecumentType(){ MongoCollection advtest = MongoDBAuthPoolUtil.getColllection("advance", "advtest"); FindIterable<Document> findIterable = advtest.find(Filters.type("age", "number")); MongoCursor<Document> iterator = findIterable.iterator(); while(iterator.hasNext()){ Document next = iterator.next(); System.out.println(next.get("name")); } }

1.5$in的方式来查询文档($nin)

public void selectDocumentIn(){ MongoCollection advtest = MongoDBAuthPoolUtil.getColllection("advance", "advtest"); FindIterable<Document> findIterable = advtest.find(Filters.in("name", "mm1", "mm2")); MongoCursor<Document> iterator = findIterable.iterator(); while(iterator.hasNext()){ System.out.println(iterator.next()); } }

1.6regex的方式来查询文档

public void selectDocumentRegex(){ MongoCollection advtest = MongoDBAuthPoolUtil.getColllection("advance", "advtest"); FindIterable name = advtest.find(Filters.and(Filters.regex("name", Pattern.compile("^m.*1$")),Filters.eq("name","mm1"))); MongoCursor<Document> iterator = name.iterator(); while(iterator.hasNext()){ System.out.println(iterator.next()); } }

1.7带排序文档的查询

public void selectDocumnetSorting(){ MongoCollection advtest = MongoDBAuthPoolUtil.getColllection("advance", "advtest"); FindIterable sort = advtest.find(Filters.regex("name", Pattern.compile("^m"))).sort(new Document("name", -1)); MongoCursor<Document> iterator = sort.iterator(); while(iterator.hasNext()){ System.out.println(iterator.next()); } } java操作日期

1.1插入当前日期

public void insertDate(){ MongoCollection advtest = MongoDBAuthPoolUtil.getColllection("advance", "advtest"); Document document = new Document(); document.put("name", "mu10"); document.put("date", new Date()); advtest.insertOne(document); }

1.2插入自定义指定格式日期

public void insertDate() throws ParseException { MongoCollection advtest = MongoDBAuthPoolUtil.getColllection("advance", "advtest"); Date parse = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2021-1-1 10:10:0"); Document document = new Document(); document.put("name", "mu10"); document.put("date", parse); advtest.insertOne(document); } java操控聚合函数

1.1聚合函数

public void group(){ MongoCollection advtest = MongoDBAuthPoolUtil.getColllection("advance", "advtest"); Document sum = new Document(); sum.put("$sum", 1); Document count = new Document(); count.put("_id", null); count.put("count", sum); Document group = new Document(); group.put("$group", count); List<Document> list = new ArrayList<>(); list.add(group); AggregateIterable aggregate = advtest.aggregate(list); MongoCursor iterator = aggregate.iterator(); while(iterator.hasNext()){ System.out.println(iterator.next()); } }

分组前的数据过滤 分组后的数据过滤

java操控分页查询

使用skip(跳过多少文档)和limit(取多少文档)方法分页

public void selectDocumentSkipLimit(){ int page=(2-1)*2; MongoCollection advtest = MongoDBAuthPoolUtil.getColllection("advance", "advtest"); long l = advtest.countDocuments(); System.out.println(l); FindIterable limit = advtest.find().skip(page).limit(2); MongoCursor<Document> iterator = limit.iterator(); while(iterator.hasNext()){ Document next = iterator.next(); System.out.println(next); } }

skip方法比较耗时


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #java连接MongoDB