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 选择成功

更多操作可以参考:http://mongodb.github.io/mongo-java-driver/3.0/driver/getting-started/quick-tour/

参考文档:http://blog.csdn.net/ererfei/article/details/50857103

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
7月前
|
NoSQL Java MongoDB
java连接MongoDB
java连接MongoDB
|
2月前
|
存储 JSON NoSQL
Java 中MongoDB的使用
Java 中MongoDB的使用
19 2
|
3月前
|
NoSQL JavaScript Java
Java Python访问MongoDB
Java Python访问MongoDB
24 4
|
4月前
|
NoSQL Java 关系型数据库
MongoDB保姆级指南(下):无缝集成SpringData框架,一篇最全面的Java接入指南!
前面的两篇文章已经将MongoDB大多数知识进行了阐述,不过其中的所有内容,都基于原生的MongoDB语法在操作。可是,在实际的日常开发过程中,我们并不会直接去接触MongoDB,毕竟MongoDB只能算作是系统内的一个组件,无法仅依靠它来搭建出一整套系统。
198 1
|
5月前
|
存储 NoSQL Java
|
6月前
|
NoSQL Java MongoDB
Java一分钟之-Spring Data MongoDB:MongoDB集成
【6月更文挑战第11天】Spring Data MongoDB简化Java应用与MongoDB集成,提供模板和Repository模型。本文介绍其基本用法、常见问题及解决策略。包括时间字段的UTC转换、异常处理和索引创建。通过添加相关依赖、配置MongoDB连接、定义Repository接口及使用示例,帮助开发者高效集成MongoDB到Spring Boot应用。注意避免时间差、异常处理不充分和忽视索引的问题。
164 0
|
7月前
|
NoSQL Java 关系型数据库
Java基础教程(21)-Java连接MongoDB
【4月更文挑战第21天】MongoDB是开源的NoSQL数据库,强调高性能和灵活性。Java应用通过MongoDB Java驱动与之交互,涉及MongoClient、MongoDatabase、MongoCollection和Document等组件。连接MongoDB的步骤包括:配置连接字符串、创建MongoClient、选择数据库和集合。伪代码示例展示了如何建立连接、插入和查询数据。
|
7月前
|
运维 NoSQL Java
Serverless 应用引擎产品使用之在函数计算上部署Java服务并访问阿里云MongoDB如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
7月前
|
NoSQL Java MongoDB
java 连接mongodb的样例代码
java 连接mongodb的样例代码
|
NoSQL Java 数据库