`
wusuoya
  • 浏览: 640262 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论

MongoDB Java Driver操作指南

    博客分类:
  • SSH
阅读更多

MongoDB为Java提供了非常丰富的API操作,相比关系型数据库,这种NoSQL本身的数据也有点面向对象的意思,所以对于Java来说,Mongo的数据结构更加友好。

MongoDB在今年做了一次重大升级,版本来到了3.0。
相比之前的版本,这个版本中又很大的变化,相应地,本文中的方法可能在旧的版本中无法使用。

安装MongoDB Java Driver

使用maven的用户在pom.xml中使用以下的dependency。

<dependency>
   <groupId>org.mongodb</groupId>
   <artifactId>mongodb-driver</artifactId>
   <version>3.1.0-SNAPSHOT</version>
</dependency>
<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongo-java-driver</artifactId>
    <version>3.1.0-SNAPSHOT</version>
</dependency>

建立连接

程序可以通过MongoClient这个类和MongoDB数据库建立连接。


MongoClient mongoClient = new MongoClient();

// or
MongoClient mongoClient = new MongoClient( "localhost" );

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

// or, 连接副本集,MongoClient会自动识别出
MongoClient mongoClient = new MongoClient(
  Arrays.asList(new ServerAddress("localhost", 27017),
                new ServerAddress("localhost", 27018),
                new ServerAddress("localhost", 27019)));

MongoDatabase database = mongoClient.getDatabase("mydb");

如果mydb不存在的话,那么Mongo也会给我们新创建一个数据库。

MongoDatabase的本质就是一个数据库的连接,而MongoClient是一个Client,所以我们在应用中可能需要多个连接,却只需要创建一个MongoClient就可以了,MongoClient本身封装了一个连接池。关于MongoClient,后面再补一篇文章。

获得集合

在得到连接之后,通过getCollection()方法来获取,相同地,如果获取的集合不存在,那么Mongo会为我们创建这个集合。

MongoCollection<Document> collection = database.getCollection("users");

插入一个文档

在MongoDB中,数据都是以文档的形式存在的,一个集合可以理解成一个“文档链”。

在获得集合之后,程序就可以通过集合来插入一个新的数据了。

在Mongo Java API中,文档对应的类是Document , 文档中间还可以内嵌文档。

比如插入这样的数据

{
	"username" : "whthomas",
	"age" : "22",
	"location":{
		"city" : "hangzhou",
		"x" : 100,
		"y" : 200
	}
}
Document doc = new Document("username","whthomas").append("age", "22").append("location", new Document("city", "hangzhou").append("x", 100).append("y","200"));

collection.insertOne(doc);

如果要插入多个文档。使用insertMany()函数效率会更高一些,这个函数接受一个List< Document >类型。

List<Document> documents = new ArrayList<Document>();
for (int i = 0; i < 100; i++) {
    documents.add(new Document("i", i));
}

collection.insertMany(documents);

查询操作

查询操作数据库操作中相对比较复杂的操作,在MongoDB中通过集合的find()方法来查询数据。

find()函数会返回FindIterable,它提供了一个接口给程序操作和控制这个集合。

得到第一条数据

使用first()函数可以得到结果集中的第一条数据,如果没有找到数据,则返回一个null值。

Document myDoc = collection.find().first();

得到所有数据

通过iterator方法将FindIterable对象转换成一个MongoCursor对象。

MongoCursor<Document> cursor = collection.find().iterator();
try {
    while (cursor.hasNext()) {
	System.out.println(cursor.next().toJson());
    }
} finally {
    cursor.close();
}

条件查询

MongoDB的Java条件查询操作,在我看来有些不那么面向对象,写起来有点函数式编程的味道。

通过Filters、Sorts和Projections三个类,我们可以完成复杂的查询操作。

比如程序需要得到一个指定条件的数据

import static com.mongodb.client.model.Filters.*;

Document myDoc = collection.find(eq("i", 71)).first();

往find函数中“传递”一个eq函数,得到i为71的数据。

过滤条件函数
|条件|函数|例子 |
|----|----|---|
|等于 |eq()| eq("i",50)|
|大于 |gt()| gt("i",50)|
|小于 |lt()| lt("i",50)|
|大于等于(>=)|gte()| gte("i",50)|
|小于等于(<=) |lte()| lte("i",50)|
|存在 |exists()| exists("i")|

排序操作

对FindIterable对象使用sort函数进行排序。ascending函数表示升序,descending函数表示降序。

collection.find().sort(orderBy(ascending("x", "y"), descending("z")))

过滤字段

有时候,我们并不需要一条数据中所有的内容,只是需要一部分而已,mongoDB 提供了一个projection方法,解决了这个问题。

collection.find().projection(fields(include("x", "y"), excludeId()))

使用forEach

有时候对不同的集合会有相同的操作,做通用方法是最佳实践,Mongo对于函数式的编程范式真是充满了热情,为我们提供了大量非常“函数式”的方法(在Java这种完全面向对象的语言里,做到这样真是不容易)。

我们可以通过forEach函数和Block类完成对集合中每个节点数据的操作。

Block<Document> printBlock = new Block<Document>() {
     @Override
     public void apply(final Document document) {
         System.out.println(document.toJson());
     }
};
collection.find(gt("i", 50)).forEach(printBlock);

更新数据

使用updateOne()函数,更新一条数据,第一个参数选取需要被更新的记录,第二个参数设置需要被更新的具体数据

collection.updateOne(eq("i", 10), new Document("$set", new Document("i", 110)));

如果需要更新多条数据,可以使用updateMany函数,这个函数会返回一个UpdateResult类的对象,这个对象里面保存了数据更新的结果。

UpdateResult updateResult = collection.updateMany(lt("i", 100),
          new Document("$inc", new Document("i", 100)));

删除数据

通过集合使用deleteOne()方法来删除指定的数据,如果想要删除多条数据,使用deleteMany方法来完成操作.

collection.deleteOne(eq("i", 110));

DeleteResult deleteResult = collection.deleteMany(gte("i", 100));

Bulk操作

MongoDB提供了一种称为Bulk的操作方式,数据不会被立即被持久化到数据库中,而是等待程序调度,确定合适的时间持久化到数据库中。

Bulk操作支持有序操作,和无序操作两种模式。有序操作中数据的的操作,会按照顺序操作,一旦发生错误,操作就会终止;而无序操作,则不安顺序执行,只会报告哪些操作发生了错误。

Bulk操作支持增删改三种操作,对应的model分别是InsertOneModel、UpdateOneModel、DeleteOneModel、ReplaceOneModel。它们都继承于WriteModel

// 有序操作
collection.bulkWrite(
  Arrays.asList(new InsertOneModel<>(new Document("_id", 4)),
                new InsertOneModel<>(new Document("_id", 5)),
                new InsertOneModel<>(new Document("_id", 6)),
                new UpdateOneModel<>(new Document("_id", 1),
                                     new Document("$set", new Document("x", 2))),
                new DeleteOneModel<>(new Document("_id", 2)),
                new ReplaceOneModel<>(new Document("_id", 3),
                                      new Document("_id", 3).append("x", 4))));


 // 无序操作
collection.bulkWrite(
  Arrays.asList(new InsertOneModel<>(new Document("_id", 4)),
                new InsertOneModel<>(new Document("_id", 5)),
                new InsertOneModel<>(new Document("_id", 6)),
                new UpdateOneModel<>(new Document("_id", 1),
                                     new Document("$set", new Document("x", 2))),
                new DeleteOneModel<>(new Document("_id", 2)),
                new ReplaceOneModel<>(new Document("_id", 3),
                                      new Document("_id", 3).append("x", 4))),
  new BulkWriteOptions().ordered(false));
分享到:
评论

相关推荐

    mongo-java-driver:MongoDB的Java驱动程序

    对于MongoDB Java驱动程序的问题,疑问或反馈,请查看我们的。 请不要直接向任何Java驱动程序开发人员发送有关问题的电子邮件,否则您很可能在上得到答案。 至少,请在描述中包括您所使用的驱动程序的确切版本。 ...

    java实现mongodb数据库的操作

    本资料将深入讲解如何使用Java实现对MongoDB数据库的操作。 一、MongoDB简介 MongoDB是一个基于分布式文件存储的NoSQL数据库,它摒弃了传统的关系型数据库模型,采用JSON(JavaScript Object Notation)格式的文档...

    Mongodb Java操作实例代码+windows安装包+jar包+ROBO可视化工具

    本资源包提供了MongoDB在Windows平台上的安装指南、Java操作实例代码、所需的jar包以及ROBO 3T(前身为ROBO MongoDB)这一可视化工具,帮助开发者快速上手MongoDB的Java应用。 首先,让我们详细讲解MongoDB的...

    mongodb安装配置及java操作mongodb

    在这个主题中,我们将深入探讨MongoDB的安装配置以及如何使用Java进行操作。 首先,让我们看看《Mongodb安装.doc》。这份文档应该详细介绍了在各种操作系统(如Windows、Linux或macOS)上安装MongoDB的步骤。安装...

    基于java的mongodb开发环境搭建

    本节将详细介绍如何使用Java语言对MongoDB进行基本的操作,包括连接数据库、插入数据、查询数据等。 ##### 2.1 创建连接 在Java代码中,可以通过以下方式创建MongoDB连接: ```java import com.mongodb.Mongo; ...

    mongodb-async-driver-2.0.1.rar

    MongoDB是一个流行的开源文档数据库系统,以其高性能、灵活性和易用性而闻名。...同时,对于"mongodb-async-driver-2.0.1.jar"和"压缩.txt"的使用,建议参照相关文档或指南,确保正确集成到你的项目中。

    java mongodb增删改查示例

    在Java开发中,我们通常使用Java驱动程序(MongoDB Java Driver)来与MongoDB进行交互,进行数据的增删改查操作。下面将详细介绍如何使用Java进行MongoDB的基本操作。 1. **安装与配置MongoDB** 在开始之前,确保...

    MongoDB权威指南.pdf

    在Java中操作MongoDB,通常会使用一个名为“MongoDB Java Driver”的客户端库。通过这个驱动程序,开发者可以执行CRUD(创建、读取、更新、删除)操作,以及其他高级操作,如索引、聚合和映射等。MongoDB Java ...

    java的mongodb客户端

    MongoDB是一款高性能、开源、无模式的分布式文档型数据库,被广泛应用于Web开发、数据分析、存储大规模半结构化数据等领域。...对于更深入的学习,建议查阅MongoDB官方文档和相关的Java驱动程序指南。

    mogo-java-driver-3.4.2.jar包

    这个压缩包"mogo-java-driver-3.4.2.jar"包含了版本3.4.2的驱动,它是Java开发者连接MongoDB数据库的重要工具。MongoDB是一个流行的开源、分布式文档数据库系统,以其灵活性、可扩展性和高性能而闻名。 `mongo-java...

    Mongodb in Mycat指南

    ### MongoDB in Mycat 指南 #### 一、引言 Mycat是一款开源的分布式数据库中间件,它能够帮助开发者将多个数据库实例合并成一个逻辑上的数据库,从而达到提高性能、负载均衡的目的。Mycat本身是通过模拟MySQL的行为...

    MongoDB中文指南

    以下是对MongoDB及其与Java结合使用的详细指南。 一、MongoDB基础知识 MongoDB是一个基于分布式文件存储的NoSQL数据库,它使用JSON格式的文档作为数据存储单元,称为BSON(Binary JSON)。这种数据模型使得MongoDB...

    mongodb-driver-core-4.2.1.jar中文-英文对照文档.zip

    中文-英文对照文档,中英对照文档,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压 【***.jar中文文档.zip】,再解压其中的 【***-...

    mongodb-driver-sync-4.2.1.jar中文-英文对照文档.zip

    中文-英文对照文档,中英对照文档,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压 【***.jar中文文档.zip】,再解压其中的 【***-...

    mongodb-driver-core-4.2.3.jar中文-英文对照文档.zip

    中文-英文对照文档,中英对照文档,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压 【***.jar中文文档.zip】,再解压其中的 【***-...

    mongodb-driver-sync-4.2.3.jar中文-英文对照文档.zip

    中文-英文对照文档,中英对照文档,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压 【***.jar中文文档.zip】,再解压其中的 【***-...

    mongodb-driver-core-4.1.2.jar中文-英文对照文档.zip

    中文-英文对照文档,中英对照文档,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压 【***.jar中文文档.zip】,再解压其中的 【***-...

    mongodb-driver-sync-4.1.2.jar中文-英文对照文档.zip

    中文-英文对照文档,中英对照文档,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压 【***.jar中文文档.zip】,再解压其中的 【***-...

    Mongodb in Mycat指南.docx

    Mycat支持MongoDB的基本原理是通过实现JDBC接口,利用MongoDB Java驱动(如mongo-java-driver-2.11.4.jar)调用MongoDB的API,从而执行针对MongoDB的操作。SQL语句经过解析,转化为MongoDB API,然后发送给MongoDB...

Global site tag (gtag.js) - Google Analytics