Java 操作 MongoDB

327 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第10天,点击查看活动详情

java链接MongoDB和链接mysql类似,需要新建一个maven项目

第一步新建maven项目

第二步:在 pom.xml 导入 mongodb-java 的驱动依赖,同时将已有 Junit 测试依赖的版本修改为 4.13.2 ,代码如下所示 👇:

<!-- Junit 测试的jar包 -->
<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.13.2</version>
  <scope>test</scope>
</dependency>

<!-- 导入 mongodb-java 的驱动依赖 -->
<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-driver-sync</artifactId>
    <version>4.3.1</version>
</dependency>

✨ 说明:mongodb-driver 的驱动有两个:mongodb-driver-sync 和 mongodb-java-driver 。在 MongoDB 官方文档中有提到,现在新程序建议使用 mongodb-driver-sync,但是旧的 mongodb-java-driver 依然可用。不同的驱动依赖,API 会有所差别。

为了在测试时,控制台不会出现错误日志信息,可以在 pom.xml 文件中添加日志相关的依赖

在测试下面新建一个MongoDBTest

如何连接?

第一:连接MongoDB服务器 String uri = "mongodb://localhost:27017/?maxPoolSize=20&w=majority";

第二:uri 获取 MongoClient 对象 MongoClient client = MongoClients.create(uri);

第三:通过client获取数据库 MongoIterable names = client.listDatabaseNames();

  • 这里通过 MongoClients.create(uri) 方法获取 MongoClient 对象;listDatabaseNames() 方法可以获取 MongoDB 数据库中所有已经存在的数据库。

直接Run Test 进行测试,结果如下图所示:

图片描述

✨ 说明:MongoDB 默认只有这三个数据库。

在测试类添加一个创建数据库和集合方法

@Test
public void ceateCollection(){
  // 获取(创建)指定的数据库对象 MongoDatabase
  MongoDatabase db = client.getDatabase("test");
  System.out.println(db.getName());
  // 创建集合
  db.createCollection("testtest");
}

✨ 说明:getDatabase() 方法中指定的名称如果在 MongoDB 数据库已经存在,就表示获取当前这个 MongoDatabase 数据库对象;如果不存在,就会先在 MongoDB 数据库创建这个数据库,并返回这个 MongoDatabase 数据库对象。createCollection() 是给指定的数据库创建集合。

在 MongoDBTest 测试类中添加一个向集合中添加文档数据的方法,代码如下 👇:

@Test
public void insertDocument(){
  MongoDatabase db = client.getDatabase("test");
  // 获取指定的集合对象
  MongoCollection<Document> docs = testtest.getCollection("lq");
  Document doc = new Document();
  doc.put("name", "张三");
  doc.put("age", 30);
  doc.put("sex", "男");
  doc.put("语文成绩", 80);
  doc.put("数学成绩", 100);
  docs.insertOne(doc);
}

在 MongoDBTest 测试类中添加一个查询文档信息的方法,代码如下 👇:

@Test
public void findDocument(){
  MongoDatabase db = client.getDatabase("test");
  // 获取指定的集合对象
  MongoCollection<Document> docs = db.getCollection("testtest");
  // 获取集合中的第一条数据
  Document document = docs.find().first();
  System.out.println(document);
}

image.png

在 MongoDBTest 测试类中添加一个修改文档信息的方法,代码如下 👇:

@Test
public void updateDocument(){
  MongoDatabase db = client.getDatabase("test");
  // 获取指定的集合对象
  MongoCollection<Document> docs = db.getCollection("testtest");

  // 更新文档,将文档中 name="张三" 修改为 name="张三1"
  docs.updateOne(Filters.eq("name","张三"), new Document("$set",new Document("name", "张三1")));

  //获取集合中的第一条数据
  Document document = docs.find().first();
  System.out.println(document);
}

✨ 说明:updateOne() 是用来更新一条文档信息的,其中第一个参数 Filters.eq("name","张三") 是一个过滤条件(查询 name="张三" 的文档),第二参数是一个 Document 对象(这个对象的第一个参数为 "$set" 表示修改操作,第二个参数为将要修改的 Document 文档,这里存储了要修改的数据信息)。

在 MongoDBTest 测试类中添加一个删除文档信息的方法,代码如下 👇:

@Test
public void deleteDocument(){
  MongoDatabase db = client.getDatabase("test");
  // 获取指定的集合对象
  MongoCollection<Document> docs = db.getCollection("testtest");
  // 删除集合中为 name="张三" 的文档
  docs.deleteOne(Filters.eq("name","张三1"));
  // 获取集合中的第一条数据
  Document document = docs.find().first();
  System.out.println(document);
}