[MongoDB]MongoDB Java 入门

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SunnyYoona/article/details/52295020 1.
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SunnyYoona/article/details/52295020

1. 驱动

Maven配置:http://mongodb.github.io/mongo-java-driver/

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-driver</artifactId>
    <version>3.3.0</version>
</dependency>

2. 连接数据库

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

public class Test {
    private static Logger logger = LoggerFactory.getLogger(Test.class);
    public static void main(String[] args) {
        try {
            // 连接到 mongodb 服务
            MongoClient mongoClient = new MongoClient("localhost", 27017);
            // 连接到数据库
            MongoDatabase mongoDatabase = mongoClient.getDatabase("test");
            logger.info("Connect to database successfully");
        } catch (Exception e) {
            logger.info("连接数据库失败", e);
        }
    }
}

本实例中 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() );  
        }  
    }  
}

3. 创建集合

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

/**
 * 创建集合
 * @param collectionName
 * @param database
 */
public static void createCollection(String collectionName, MongoDatabase database){
    database.createCollection(collectionName);
}

4. 获取集合

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

/**
 * 获取集合
 * @param collectionName
 * @param database
 * @return
 */
public static MongoCollection<Document> getCollection(String collectionName, MongoDatabase database){
    MongoCollection<Document> collection = database.getCollection(collectionName);
    return collection;
}

5.插入文档

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

/**
 * 插入文档
 * @param collectionName
 * @param database
 */
public static void insertDocument(String collectionName, MongoDatabase database){
    Document document = new Document("title", "MongoDB : The Definitive Guide").
            append("author", "Kristina Chodorow").
            append("year", "2010-9-24").
            append("price", 39.99);
    Document document2 = new Document("title", "MongoDB实战").
            append("author", "丁雪丰").
            append("year", "2012-10").
            append("price", 59.0);
    List<Document> documentList = Lists.newArrayList();
    documentList.add(document);
    documentList.add(document2);
    // 获取集合
    MongoCollection<Document> collection = getCollection(collectionName, database);
    // 插入集合中
    collection.insertMany(documentList);
}

6. 检索文档

6.1 检索所有文档

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

/**
 * 检索集合中所有文档
 * @param collection
 */
public static void findAll(MongoCollection<Document> collection){
    FindIterable<Document> findIterable = collection.find();
    MongoCursor<Document> mongoCursor = findIterable.iterator();
    while(mongoCursor.hasNext()){
        logger.info("--------- document {}", mongoCursor.next());
    }
}

备注

(1) 获取迭代器FindIterable<Document>

(2) 获取游标MongoCursor<Document>

(3) 通过游标遍历检索出的文档集合

输出结果:

12:59:54.463 [main] INFO  com.sjf.open.mongodb.Test - --------- document Document{{_id=57bbd6b2521d77442c8b9055, title=MongoDB : The Definitive Guide, author=Kristina Chodorow, year=2010-9-24, price=39.99}}
12:59:54.464 [main] INFO  com.sjf.open.mongodb.Test - --------- document Document{{_id=57bbd6b2521d77442c8b9056, title=MongoDB实战, author=丁雪丰, year=2012-10, price=59.0}}

6.2 检索第一个文档

我们可以使用 com.mongodb.client.MongoCollection 类中的 find()来获取集合中的所有文档,再通过调用first()函数返回第一文档

/**
 * 检索第一个文档
 * @param collection
 */
public static void findFirst(MongoCollection<Document> collection){
    Document document = collection.find().first();
    logger.info("---------- findFirst {}", document.toString());
}

6.3 使用检索过滤器获取文档

我们可以创建一个过滤器通过find()方法来得到集合的一个document子集。例如,如果我们想要找到某个文档中“author”字段的值是"丁雪丰",我们将做以下:

/** * 使用检索过滤器获取文档 * @param collection */ public static void findByFilter(MongoCollection<Document> collection){ Iterator iterator = collection.find(Filters.eq("author","丁雪丰")).iterator(); while(iterator.hasNext()){ logger.info("--------- findByFilter {}", iterator.next()); } }

6.4 Get a Set of Documents with a Query

我们可以使用查询来从collection中得到的一个文档集合。例如,如果我们想让所有文档查找“我”> 50岁,我们可以写:

public static void findByFilter(MongoCollection<Document> collection){
    collection.find(Filters.and(Filters.gt("price",39), Filters.lt("price", 40))).forEach(printBlock);
}
    
private static Block<Document> printBlock = new Block<Document>() {
    public void apply(final Document document) {
        logger.info("-------- printBlock {}",document.toJson());
    }
};

可以注意到我们在FindIterable上使用了forEach方法。

7. 更新文档

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

/**
 * 更新文档
 * @param collection
 */
public static void update(MongoCollection<Document> collection){
    //更新文档   将文档中price=59.0的文档修改为price=52.0
    collection.updateMany(Filters.eq("price", 59.0), new Document("$set",new Document("price", 52.0)));
}

8. 删除文档

删除集合中的第一个文档,首先你需要使用com.mongodb.DBCollection类中的 deleteOne()方法来删除符合条件的第一个文档,或者使用deleteMany 方法删除符合条件的全部文档。

/**
 * 删除文档
 * @param collection
 */
public static void delete(MongoCollection collection){
    //删除符合条件的第一个文档
    DeleteResult deleteResult = collection.deleteOne(Filters.eq("price", 38.99));
    logger.info("-------- delete {}", deleteResult.toString());
    //删除所有符合条件的文档
    //DeleteResult deleteResult = collection.deleteMany (Filters.eq("price", 52.0));
}

输出结果:

22:12:49.531 [main] INFO  com.sjf.open.mongodb.Test - -------- delete AcknowledgedDeleteResult{deletedCount=1}


相关实践学习
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
目录
相关文章
|
12天前
|
JSON NoSQL Java
Redis入门到通关之Java客户端SpringDataRedis(RedisTemplate)
Redis入门到通关之Java客户端SpringDataRedis(RedisTemplate)
28 0
|
12天前
|
Java
Java编程语言入门指南
Java编程语言入门指南
15 1
|
14小时前
|
Java 编译器 对象存储
java一分钟之Java入门:认识JDK与JVM
【5月更文挑战第7天】本文介绍了Java编程的基础——JDK和JVM。JDK是包含编译器、运行时环境、类库等的开发工具包,而JVM是Java平台的核心,负责执行字节码并实现跨平台运行。常见问题包括版本不匹配、环境变量配置错误、内存溢出和线程死锁。解决办法包括选择合适JDK版本、正确配置环境变量、调整JVM内存参数和避免线程死锁。通过代码示例展示了JVM内存管理和基本Java程序结构,帮助初学者更好地理解JDK和JVM在Java编程中的作用。
8 0
|
7天前
|
设计模式 算法 安全
Java多线程编程实战:从入门到精通
【4月更文挑战第30天】本文介绍了Java多线程编程的基础,包括线程概念、创建线程(继承`Thread`或实现`Runnable`)、线程生命周期。还讨论了线程同步与锁(同步代码块、`ReentrantLock`)、线程间通信(等待/通知、并发集合)以及实战技巧,如使用线程池、线程安全设计模式和避免死锁。性能优化方面,建议减少锁粒度和使用非阻塞算法。理解这些概念和技术对于编写高效、可靠的多线程程序至关重要。
|
8天前
|
NoSQL Java 关系型数据库
Java基础教程(21)-Java连接MongoDB
【4月更文挑战第21天】MongoDB是开源的NoSQL数据库,强调高性能和灵活性。Java应用通过MongoDB Java驱动与之交互,涉及MongoClient、MongoDatabase、MongoCollection和Document等组件。连接MongoDB的步骤包括:配置连接字符串、创建MongoClient、选择数据库和集合。伪代码示例展示了如何建立连接、插入和查询数据。
|
8天前
|
算法 Java 大数据
Java从入门到精通学习报告
Java从入门到精通学习报告
17 1
|
8天前
|
数据采集 存储 前端开发
Nutch库入门指南:利用Java编写采集程序,快速抓取北京车展重点车型
2024年北京车展凸显电动车全球热度,中国引领市场,展出117台全球首发车,包括30台跨国公司电动车。借助Nutch库抓取汽车网站数据,分析电动车市场趋势。通过配置代理和多线程爬虫,高效收集新车信息,助力理解市场动态,推动可持续交通发展。
Nutch库入门指南:利用Java编写采集程序,快速抓取北京车展重点车型
|
9天前
|
运维 NoSQL Java
Serverless 应用引擎产品使用之在函数计算上部署Java服务并访问阿里云MongoDB如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
11 0
|
12天前
|
存储 设计模式 Java
Java8 CompletableFuture异步编程-入门篇
Java8 CompletableFuture异步编程-入门篇
|
13天前
|
Java 开发工具 Windows
Java入门及环境变量
Java入门及环境变量
20 1