2-5 java 和 MongoDB

第1关:Java 操作 MongoDB 数据库(一)

Java 连接数据库

获取 Java 的 Mongodb 驱动包

Java 的 MongoDB 驱动包获取网址 下载获取最新版本的驱动包,我已经帮你下载 mongo-java-driver-3.9.1.jar 放在响应环境目录下。

Java 代码连接无密码数据库

通过以下两条代码,进行数据库的连接:

MongoClient mongoClient = new MongoClient("localhost",27020);     //启动本地服务,端口号为27020
MongoDatabase mongoDatabase = mongoClient.getDatabase("databaseName");     //连接名为databaseName数据库

编译代码进行数据库连接

此步骤无需操作,平台会完成编译:

javac -cp .:mongo-java-driver-3.9.1.jar Mongoconnect.java
java -cp .:mongo-java-driver-3.9.1.jar Mongoconnect

创建集合

我们可以使用驱动 com.mongodb.client.MongoDatabase 类中的 createCollection() 来创建集合:

 mongoDatabase.createCollection("test");     //创建集合test

获取集合

使用驱动 com.mongodb.client.MongoDatabase 类的 getCollection() 方法来获取集合:

MongoCollection<Document> collection = mongoDatabase.getCollection("test");     //获取集合test

插入文档

使用驱动 com.mongodb.client.MongoCollection 类的 insertMany() 方法来插入一个文档:

//注意,在插入文档前,先选好集合再进行操作,选择test集合
MongoCollection<Document> collection = mongoDatabase.getCollection("test");
Document document1 = new Document();     //创建一条文档 document1,以下代码为向文档 document1 中追加数据
document1.append("title", "MongoDB");
document1.append("content", "I love MongoDB").
document1.append("nums", 90).
document1.append("tags", "database");
Document document2 = new Document();     //创建一条文档 document2,以下代码为向文档 document1 中追加数据
document2.append("title", "Java");
document2.append("content", "I love Java").
document2.append("nums", 30).
document2.append("tags", "language");
List<Document> documents = new ArrayList<Document>();     //将以上文档打包存放,为文档插入做准备
documents.add(document1);
documents.add(document2);
collection.insertMany(documents);     //插入多条文档到集合中

实训

连接到mongodb服务

MongoClient mongoClient = new MongoClient("localhost",27017);
MongoDatabase mongoDatabase = mongoClient.getDatabase("mydb1");

创建集合test1

mongoDatabase.createCollection("test1");

获取集合test1

MongoCollection<Document> collection = mongoDatabase.getCollection("test1");

插入编程要求中的数据到集合test1

Document document1 = new Document();
document1.append("_id","1");
document1.append("name", "Xiaoming");
document1.append("sex","man");
document1.append("age", 21);
collection.insertOne(document1);

第2关:Java 操作 MongoDB 数据库(二)

检索文档

使用驱动 com.mongodb.client.MongoCollection 类中的 find() 方法来获取集合中的所有文档。

此方法返回一个游标,所以你需要遍历这个游标。

//检索所有文档
/**
 * 1. 获取迭代器FindIterable<Document> 
 * 2. 获取游标MongoCursor<Document> 
 * 3. 通过游标遍历检索出的文档集合 
 **/
FindIterable<Document> findIterable = collection.find();
MongoCursor<Document> mongoCursor = findIterable.iterator();
while(mongoCursor.hasNext()){
System.out.println(mongoCursor.next());
}

更新文档

你可以使用 com.mongodb.client.MongoCollection 类中的 updateMany() 方法来更新集合中的文档:

//更新文档:将第一关例子文档中nums=90的文档修改为nums=100
collection.updateMany(Filters.eq("nums", 90), new Document("$set",new Document("nums",100)));

删除文档

要删除集合中的第一个文档,首先你需要使用 com.mongodb.DBCollection 类中的 findOne() 方法来获取第一个文档,然后使用 remove() 方法删除。

//删除符合条件的第一个文档
collection.deleteOne(Filters.eq("nums", 100));
//删除所有符合条件的文档
collection.deleteMany (Filters.eq("nums", 100));

实训

连接数据库mydb2并选择集合test2

MongoClient mongoClient = new MongoClient("localhost", 27017);
MongoDatabase mongoDatabase = mongoClient.getDatabase("mydb2");
mongoDatabase.createCollection("test2");

插入文档到集合test2中

MongoCollection<Document> collection = mongoDatabase.getCollection("test2");
Document document1 = new Document();
document1.append("_id", "1");
document1.append("name", "Xiaoming");
document1.append("sex", "man");
document1.append("age", 21);
Document document2 = new Document();
document2.append("_id", "2");
document2.append("name", "Xiaohong");
document2.append("sex", "woman");
document2.append("age", 20);
Document document3 = new Document();
document3.append("_id", "3");
document3.append("name", "Xiaoliang");
document3.append("sex", "man");
document3.append("age", 22);
List<Document> documents = new ArrayList<>();
documents.add(document1);
documents.add(document2);
documents.add(document3);
collection.insertMany(documents);

更新 Xiaohong 的信息为23岁

collection.updateMany(Filters.eq("age", 20), new Document("$set", new Document("age", 23)));

删除Xiaoliang的信息

collection.deleteMany(Filters.eq("name", "Xiaoliang"));
最后修改:2021 年 11 月 01 日 10 : 49 AM