根据老师要求,根据实验报告所给出的源码进行MongoDB的java操作实现。
参考:MongoDB|菜鸟教程;林子雨大数据研究室;
实验环境:
1、Linux CentOS 6;
2、jdk-1.8.0;
3、mongodb-linux-x86_64-3.4;
4、windows 下eclipse。
实验原理
Java驱动是MongoDB最早的驱动。它已经用于生产环境多年,而且非常稳定,是企业开发的首选。
要在Java应用中访问和使用MongoDB,需要使用Java MongoDB驱动程序。Java MongoDB驱动程序是一个库,它提供了多个对象,供使用者连接数据库,进而查找和操作集合中的对象,这些对象分别表示MongoDB服务器连接、数据库、集合、游标和文档,提供了在Java应用程序中集成MongoDB数据库中的数据所需的功能。
Java对象MongoClient提供了连接到MongoDB服务器和访问数据库的功能。要在应用程序中实现MongoDB,首先要创建一个MongoClient对象实例,然后就可使用它来访问数据库。
实验目的:
1、了解使用Java操作MongoDB的流程
2、学习编写Java操作MongoDB的代码
实验内容
1.编写Java代码连接MongoDB数据库。
2.编写Java代码在MongoDB中创建集合。
3.编写Java代码在MongoDB中获取集合。
4.编写Java代码在MongoDB中插入文档。
5.编写Java代码在MongoDB中检索所有文档。
6.编写Java代码在MongoDB中更新文档。
7.编写Java代码在MongoDB中删除文档。
实验步骤
MongoDB环境搭建:
参照这篇博客进行安装:Centos环境下安装mongoDB
注:如果在安装过程中出现以下问题,请通过这些办法进行解决
1、出现有安装失败的问题(提醒 安装失败 或者有 GPG key retrieval failed: [Errno 14] problem making ssl connection)
解决方法一:更换MongoDB版本
解决方法二:重新进入创建的仓库文件 vi /etc/yum.repos.d/mongodb-org-3.4.repo,将 gpgcheck=1 改成 gpgcheck=0(或者在刚开始安装的时候就把他设置成0)
2、出现/etc/yum.repos.d/CentOS6-Base-163.repo: open for write: permission denied
首先备份/etc/yum.repos.d/CentOS-Base.repo
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
下载对应的CentOS版本的版本repo文件, 放入/etc/yum.repos.d/
- CentOS5 http://mirrors.163.com/.help/CentOS5-Base-163.repo
- CentOS6 http://mirrors.163.com/.help/CentOS6-Base-163.repo
然后运行yum makecache生成缓存,重新安装。
驱动包下载
下载地址:http://central.maven.org/maven2/org/mongodb/mongo-java-driver/3.2.2/mongo-java-driver-3.2.2.jar
下载最新的jar包,Build Path到项目中(确保下载的jar包是最新版的)
API实现
1、创建java project ,名称为mongodb ;创建包 mongo
2、创建MongoDB连接(Mimalianjie.java)
按照上面的教程安装之后,默认是没有用户密码的,可以使用这种方式进行连接。
1 import com.mongodb.MongoClient; 2 import com.mongodb.client.MongoDatabase; 3 4 public class Mimalianjie{ 5 public static void main( String args[] ){ 6 try{ 7 // 连接到 mongodb 服务 8 MongoClient mongoClient = new MongoClient( "192.168.57.128" , 27017 ); 9 10 // 连接到数据库 11 MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol"); 12 System.out.println("Connect to database successfully"); 13 14 }catch(Exception e){ 15 System.err.println( e.getClass().getName() + ": " + e.getMessage() ); 16 } 17 } 18 }
如果你在安装之后,重新设置了密码,可以使用以下代码(下面的内容都以无密码为基础,有设置密码的参照下面的代码进行修改):
1 import java.util.ArrayList; 2 3 import com.mongodb.MongoClient; 4 import com.mongodb.MongoCredential; 5 import com.mongodb.ServerAddress; 6 import com.mongodb.client.MongoDatabase; 7 8 public class Mimalianjie { 9 private static MongoClient mongoClient; 10 private static MongoDatabase mongoDatabase; 11 12 public static void main(String[] args) { 13 try { 14 //连接mongodb 15 ServerAddress serverAddress = new ServerAddress("192.168.57.128", 27017); 16 ArrayList<ServerAddress> addresses = new ArrayList<ServerAddress>(); 17 addresses.add(serverAddress); 18 19 MongoCredential credential = MongoCredential.createScramSha1Credential("root", "admin", 20 "strongs".toCharArray()); 21 ArrayList<MongoCredential> credentials = new ArrayList<MongoCredential>(); 22 credentials.add(credential); 23 24 mongoClient = new MongoClient(addresses, credentials); 25 26 setMongoDatabase(mongoClient.getDatabase("databaseName")); 27 System.out.println("Connect to database successfully"); 28 } catch (Exception e) { 29 // TODO: handle exception 30 System.out.println(e.getClass().getName() + ":" + e.getMessage()); 31 } 32 } 33 34 public static MongoDatabase getMongoDatabase() { 35 return mongoDatabase; 36 } 37 38 public static void setMongoDatabase(MongoDatabase mongoDatabase) { 39 Mimalianjie.mongoDatabase = mongoDatabase; 40 } 41 42 }
结果出现以下内容说明连接成功:
2、创建集合(Chuangjianjihe.java),在mycol库下创建test集合
1 import com.mongodb.MongoClient; 2 import com.mongodb.client.MongoDatabase; 3 4 public class Chuangjianjihe { 5 private static MongoClient mongoClient; 6 7 public static void main(String[] args) { 8 try { 9 mongoClient = new MongoClient("192.168.57.128", 27017); 10 11 // 连接到数据库 12 MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol"); 13 System.out.println("Connect to database successfully"); 14 mongoDatabase.createCollection("test"); 15 System.out.println("集合创建成功"); 16 17 } catch (Exception e) { 18 System.err.println(e.getClass().getName() + ": " + e.getMessage()); 19 } 20 } 21 }
出现以下结果说明创建成功:
在mongo上进行验证,输出所有已经创建好的集合
3、获取集合(Huoqujihe.java)
1 import org.bson.Document; 2 3 import com.mongodb.MongoClient; 4 import com.mongodb.client.MongoCollection; 5 import com.mongodb.client.MongoDatabase; 6 public class Huoqujihe { 7 private static MongoClient mongoClient; 8 private static MongoCollection<Document> collection; 9 10 public static void main(String[] args) { 11 try { 12 mongoClient = new MongoClient("192.168.57.128", 27017); 13 14 // 连接到数据库 15 MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol"); 16 System.out.println("Connect to database successfully"); 17 18 setCollection(mongoDatabase.getCollection("test")); 19 System.out.println("集合 test 选择成功"); 20 } catch (Exception e) { 21 System.err.println(e.getClass().getName() + ": " + e.getMessage()); 22 } 23 } 24 25 public static MongoCollection<Document> getCollection() { 26 return collection; 27 } 28 29 public static void setCollection(MongoCollection<Document> collection) { 30 Huoqujihe.collection = collection; 31 } 32 }
出现以下情况说明获取成功:
4、插入文档(Charuwendang.java)
1 import java.util.ArrayList; 2 import java.util.List; 3 4 import org.bson.Document; 5 6 import com.mongodb.MongoClient; 7 import com.mongodb.client.MongoCollection; 8 import com.mongodb.client.MongoDatabase; 9 10 public class Charuwendang { 11 private static MongoClient mongoClient; 12 13 public static void main(String[] args) { 14 try{ 15 mongoClient = new MongoClient( "192.168.57.128" , 27017 ); 16 17 // 连接到数据库 18 MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol"); 19 System.out.println("Connect to database successfully"); 20 21 MongoCollection<Document> collection = mongoDatabase.getCollection("test"); 22 System.out.println("集合 test 选择成功"); 23 //插入文档 24 /** 25 * 1. 创建文档 org.bson.Document 参数为key-value的格式 26 * 2. 创建文档集合List<Document> 27 * 3. 将文档集合插入数据库集合中 mongoCollection.insertMany(List<Document>) 插入单个文档可以用 mongoCollection.insertOne(Document) 28 * */ 29 Document document = new Document("title", "MongoDB"). 30 append("description", "database"). 31 append("likes", 100). 32 append("by", "Fly"); 33 List<Document> documents = new ArrayList<Document>(); 34 documents.add(document); 35 collection.insertMany(documents); 36 System.out.println("文档插入成功"); 37 }catch(Exception e){ 38 System.err.println( e.getClass().getName() + ": " + e.getMessage() ); 39 } 40 } 41 }
出现以下情况说明插入成功:
5、检索文档(Jiansuowendang.java)
1 import org.bson.Document; 2 3 import com.mongodb.MongoClient; 4 import com.mongodb.client.FindIterable; 5 import com.mongodb.client.MongoCollection; 6 import com.mongodb.client.MongoCursor; 7 import com.mongodb.client.MongoDatabase; 8 9 public class Jiansuowendang { 10 11 private static MongoClient mongoClient; 12 13 public static void main(String[] args) { 14 // TODO Auto-generated method stub 15 try { 16 mongoClient = new MongoClient("192.168.57.128", 27017); 17 18 // 连接到数据库 19 MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol"); 20 System.out.println("Connect to database successfully"); 21 22 MongoCollection<Document> collection = mongoDatabase.getCollection("test"); 23 System.out.println("集合 test 选择成功"); 24 25 // 检索所有文档 26 /** 27 * 1. 获取迭代器FindIterable<Document> 2. 获取游标MongoCursor<Document> 3. 28 * 通过游标遍历检索出的文档集合 29 */ 30 FindIterable<Document> findIterable = collection.find(); 31 MongoCursor<Document> mongoCursor = findIterable.iterator(); 32 while (mongoCursor.hasNext()) { 33 System.out.println(mongoCursor.next()); 34 } 35 36 } catch (Exception e) { 37 System.err.println(e.getClass().getName() + ": " + e.getMessage()); 38 } 39 } 40 41 }
出现以下情况说明检索成功:
6、更新文档(Gengxinwendang.java)
1 import org.bson.Document; 2 3 import com.mongodb.MongoClient; 4 import com.mongodb.client.FindIterable; 5 import com.mongodb.client.MongoCollection; 6 import com.mongodb.client.MongoCursor; 7 import com.mongodb.client.MongoDatabase; 8 import com.mongodb.client.model.Filters; 9 10 public class Gengxinwendang { 11 private static MongoClient mongoClient; 12 13 public static void main(String[] args) { 14 15 try { 16 mongoClient = new MongoClient("192.168.57.128", 27017); 17 18 // 连接到数据库 19 MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol"); 20 System.out.println("Connect to database successfully"); 21 22 MongoCollection<Document> collection = mongoDatabase.getCollection("test"); 23 System.out.println("集合 test 选择成功"); 24 25 // 更新文档 将文档中likes=100的文档修改为likes=200 26 collection.updateMany(Filters.eq("likes", 100), new Document("$set", new Document("likes", 200))); 27 // 检索查看结果 28 FindIterable<Document> findIterable = collection.find(); 29 MongoCursor<Document> mongoCursor = findIterable.iterator(); 30 while (mongoCursor.hasNext()) { 31 System.out.println(mongoCursor.next()); 32 } 33 34 } catch (Exception e) { 35 System.err.println(e.getClass().getName() + ": " + e.getMessage()); 36 } 37 } 38 }
出现以下内容说明更新成功:
在mongoDb进行验证:
7、删除文档(Shanchuwendang.java)
1 import org.bson.Document; 2 3 import com.mongodb.MongoClient; 4 import com.mongodb.client.FindIterable; 5 import com.mongodb.client.MongoCollection; 6 import com.mongodb.client.MongoCursor; 7 import com.mongodb.client.MongoDatabase; 8 import com.mongodb.client.model.Filters; 9 10 public class Shanchuwendang { 11 private static MongoClient mongoClient; 12 13 public static void main(String[] args) { 14 try { 15 mongoClient = new MongoClient("192.168.57.128", 27017); 16 17 // 连接到数据库 18 MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol"); 19 System.out.println("Connect to database successfully"); 20 21 MongoCollection<Document> collection = mongoDatabase.getCollection("test"); 22 System.out.println("集合 test 选择成功"); 23 24 // 删除符合条件的第一个文档 25 collection.deleteOne(Filters.eq("likes", 200)); 26 // 删除所有符合条件的文档 27 collection.deleteMany(Filters.eq("likes", 200)); 28 // 检索查看结果 29 FindIterable<Document> findIterable = collection.find(); 30 MongoCursor<Document> mongoCursor = findIterable.iterator(); 31 while (mongoCursor.hasNext()) { 32 System.out.println(mongoCursor.next()); 33 } 34 35 } catch (Exception e) { 36 System.err.println(e.getClass().getName() + ": " + e.getMessage()); 37 } 38 } 39 }
出现以下情况说明删除成功:
在MongoDB中进行验证,没有查询出任何结果:
下一篇:MapReduce 处理简单数据