根据老师要求,根据实验报告所给出的源码进行MongoDB的java操作实现。

参考:MongoDB|菜鸟教程;林子雨大数据研究室;


实验环境:

1Linux CentOS 6

2jdk-1.8.0

3mongodb-linux-x86_64-3.4

4windows 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 处理简单数据 

01-12 17:06