MongoDB Java使用指南

引入MongoDB Java Driver包

如果需要操作MongoDB的Java项目是一个Maven项目,可以在依赖中加上以下的配置。

<dependencies>
    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongo-java-driver</artifactId>
        <version>2.13.2</version>
    </dependency>
</dependencies>

或者通过直接下载jar包的方式使用,下载地址:mongo-java-driver-2.13.2.jar

连接MongoDB

可以使用MongoClient来连接MongoDB,MongoClient的使用方式如下:

MongoClient mongoClient = new MongoClient("localhost", 27017);
DB db = mongoClient.getDB("mydb");

上面的代码连接了localhost:27017上MongoDB服务,并指定使用mydb数据库。连接后便可以对这个数据库作进一步的操作。

需要指出的是,MongoClient是线程安全的,可以在多程和环境中共享同一个MongoClient。通常来说,一个应用程序中,只需要生成一个全局的MongoClient实例,然后在程序的其他地方使用这个实例即可。

认证

可以使用多种方式对连接进行认证,下面介绍两种方式。

方式一:MongoCredential

MongoCredential类的createCredential方法可以指定认证的用户名,密码,以及使用的数据库,并返回一个MongoCredential对象。其方法的声明如下:

static MongoCredential createCredential(String userName, String database, char[] password)

例如,

MongoCredential credential = MongoCredential.createCredential("user", "mydb", "password".toCharArray();

上面创建了一个用户名为user,密码为password,数据库为mydbMongoCredential对象。

将生成MongoCredential的对象作为MongoClient构造函数的参数。由于MongoClient构造函数的为List<MongoCredential>类型,所以需要先构造成一个List再传递。完整的认证的例子如下:

MongoCredential credential = MongoCredential.createCredential("user", "mydb", "password".toCharArray());
ServerAddress serverAddress = new ServerAddress("localhost", 27017);
MongoClient mongoClient = new MongoClient(serverAddress, Arrays.asList(credential));
DB db = mongoClient.getDB("mydb");

方式二:MongoClientURI

亦可以使用MongoClientURI完成MongoDB的认证,它代表了一个URI对象。MongoClientURI的构造函数接受一个String类型的字符串,这个字符串的格式如下:

mongodb://[username:[email protected]]host1[:port1][,host2[:port2],…[,hostN[:portN]]][/[database][?options]]

生成的MongoClientURI对象作为MongoClient构造函数的参数,完整的认证例子如下:

String sURI = String.format("mongodb://%s:%s@%s:%d/%s", "user", "password", "localhost", 27017, "mydb");
MongoClientURI uri = new MongoClientURI(sURI);
MongoClient mongoClient = new MongoClient(uri);
DB db = mongoClient.getDB("mydb");

获取一个集合

DBCollection coll = db.getCollection("mycol");

然后可以对指定的集合进行操作,例如,插入,删除,查找,更新文档等。

插入文档

例如,一个文档以Json来表示如下,

{ “name”: “mongo”, “info”: { “ver”: “3.0” } }

现在需要插入到集合mycol中。为了插入到集合中,可以使用BasicDBObject构造一个文档。

BasicDBObject doc = new BasicDBObject("name", "mongo").append("info", new BasicDBObject("ver", "3.0"));
coll.insert(doc);

查找文档

通过findOne查找一个符合条件文档

通过findOne可以查找一个符合条件的文档。例如,对于上面的mycol集合,执行以下命令:

DBObject myDoc = coll.findOne();
System.out.println(myDoc);

将输出mycol集合中的第一个文档。也可以通过指定findOne的查找参数,来查找符合查找条件的一个文档。

通过find查找所有符合条件的文档

find用来查找符合条件的文档,它返回一个DBCursor对象,通过遍历DBCursor对象,可以获得所有符合查找条件的文档。

为了说明和测试,我们先插入一批以下格式的文档

{ “i”: value }

for (int i=0; i < 100; i++) {
    coll.insert(new BasicDBObject("i", i));
}

find的使用示例如下:

DBCursor cursor = coll.find();
try {
   while(cursor.hasNext()) {
       System.out.println(cursor.next());
   }
} finally {
   cursor.close();
}

会输出mycol集合中所有的文档。

也可以指定查找的条件,例如:

BasicDBObject query = new BasicDBObject("i", 71);

DBCursor cursor = coll.find(query);

try {
   while(cursor.hasNext()) {
       System.out.println(cursor.next());
   }
} finally {
   cursor.close();
}

对于查找条件中包括$操作符的情形,例如以下一条mongo shell命令:

db.coll.find({i: {$gte: 50}});

可以使用DBObject生成查找条件,

// find all where i >= 50
BasicDBObject query = new BasicDBObject("i", new BasicDBObject("$gte", 50));

DBCursor cursor = coll.find(query);
try {
    while (cursor.hasNext()) {
        System.out.println(cursor.next());
    }
} finally {
    cursor.close();
}

更新文档

BasicDBObject query = new BasicDBObject("i", 70);
BasicDBObject up = new BasicDBObject("$set", new BasicDBObject("i", 100));
coll.update(query, up);

上面的语句将i为70的文档更新i的值等于100。

与我们常用的更新文档的mongo语句一样,DBCollection还包含了savefindAndModify等更新文档的方法,其使用方法在此不再赘述,可以参考API说明文档即可。

删除文档

可以通过生成一个DBObject对象来删除指定的文档,例如:

BasicDBObject query = new BasicDBObject("i", 71);
coll.remove(query);

上面的语句删除i为71的文档。

参考资料

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-06 22:40:20

MongoDB Java使用指南的相关文章

Hello MongoDB -- Java编程

环境配置:在 Java 程序中如果要使用 MongoDB,你需要确保已经安装了 Java 环境及 MongoDB JDBC 驱动. 首先你必须下载mongo jar包,下载地址:http://mongodb.github.io/mongo-java-driver/, 请确保下载最新版本. https://oss.sonatype.org/content/repositories/releases/org/mongodb/mongodb-driver/ Hello MongoDB -- Java编

Java并发指南1:并发基础与Java多线程

什么是并发 在过去单CPU时代,单任务在一个时间点只能执行单一程序.之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程.虽然并不是真正意义上的“同一时间点”,而是多个任务或进程共享一个CPU,并交由操作系统来完成多任务间对CPU的运行切换,以使得每个任务都有机会获得一定的时间片运行. 随着多任务对软件开发者带来的新挑战,程序不在能假设独占所有的CPU时间.所有的内存和其他计算机资源.一个好的程序榜样是在其不再使用这些资源时对其进行释放,以使得其他程序能有机会使用这些资源. 再后来发

Java并发指南2:深入理解Java内存模型JMM

一:JMM基础与happens-before 并发编程模型的分类 在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体).通信是指线程之间以何种机制来交换信息.在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递. 在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信.在消息传递的并发模型里,线程之间没有公共状态,线程之间必须通过明确的发送消息来显式进行通信. 同步是指程序用于控制不同

Java并发指南开篇:Java并发编程学习大纲

Java并发编程一直是Java程序员必须懂但又是很难懂的技术内容. 这里不仅仅是指使用简单的多线程编程,或者使用juc的某个类.当然这些都是并发编程的基本知识,除了使用这些工具以外,Java并发编程中涉及到的技术原理十分丰富.为了更好地把并发知识形成一个体系,也鉴于本人没有能力写出这类文章,于是参考几位并发编程专家的博客和书籍,做一个简单的整理. 一:并发基础和多线程 首先需要学习的就是并发的基础知识,什么是并发,为什么要并发,多线程的概念,线程安全的概念等. 然后学会使用Java中的Threa

Java自学指南四、书籍

阅读书籍,是最快.最有效率的一种学习方式. 自学编程通过视频快速入了门,就需要阅读大量相关书籍,提高自己知识的深度,尤其是体系化. 说几点自己关于阅读书籍的认知: 不管工作多么繁忙,都应该抽出时间阅读书籍 培养英文阅读能力 入门最好找自己能看懂的书:提高最好那些经典和高评价的书来扣 阅读一本书,能吸收 30% 的知识就算不错了 有些书适合看看电子版,浏览识记:有些适合购买纸质书,放在手头时常翻起,拓展深度 IT 方面的技术虽然层出不穷,但是计算机硬件.计算机编程的理论模型经过几十年的发展,变化甚

Java自学指南七、规划

2013 年刚入行做 Java 开发的时候,我就问师傅该如何做一份职业规划,他说不知道,因为他也没有职业规划. 收到这个答案的时候,那时候我觉得是他不愿意跟我说太多. 现在回想这个问题,我相信他是没有做职业规划的.因为他已经深耕在选择的领域一二十年,他的规划就是在华为一心做好当前的产品,不去想太多. 大道至简,无招胜有招... 我不担心遇到的问题与困难,却惧怕没有正确的方向.因为只要持续握住问题,最后总能解决,但是需求理解错了,再完美的代码都是白费力气. 今年做了几件事: 刷了 300 多道 J

三、Mongodb Java中的使用

添加maven依赖 <!--mongodb 驱动--> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-driver</artifactId> <version>3.6.4</version> </dependency> <!--mongodb Java 驱动--> <dependency> &l

7.MongoDB java CRUD

注意:要增加mongodb对应的jar包 package cn.toto.mongodb; import java.net.UnknownHostException; import org.bson.types.ObjectId; import org.junit.Test; import com.mongodb.BasicDBObject; import com.mongodb.DB; import com.mongodb.DBCollection; import com.mongodb.DB

Java 8 指南

Benjamin Winterberg “Java is still not dead—and people are starting to figure that out.” 欢迎阅读我对 Java 8 的介绍.本指南将一步步地通过所有的新的语言特性来引导你认识Java 8.在简短的示例代码的帮助下,你将会学习到如何使用默认的接口方法.lambda表达式.方法引用以及可重复的注解.在文章的最后,你将会熟悉最新的API变化,例如:streams.函数式接口.map 扩展以及新的 Date API