Java操作MongoDB

Java操作MongoDB

大家好,又见面了,我是全栈君。

之前我们介绍的MongoDB的操作都是在shell命令中写的,在项目开发时我们当然都是用程序去操作MongoDB的,本文我们来看看如何用Java代码操作MongoDB。

本文是MongoDB系列的第十九篇文章,了解前面的文章有助于更好的理解本文:


1.Linux上安装MongoDB
2.MongoDB基本操作
3.MongoDB数据类型
4.MongoDB文档更新操作
5.MongoDB文档查询操作(一)
6.MongoDB文档查询操作(二)
7.MongoDB文档查询操作(三)
8.MongoDB查看执行计划
9.初识MongoDB中的索引
10.MongoDB中各种类型的索引
11.MongoDB固定集合
12.MongoDB管道操作符(一)
13.MongoDB管道操作符(二)
14.MongoDB中MapReduce使用
15.MongoDB副本集搭建
16.MongoDB副本集配置
17.MongoDB副本集其他细节
18.初识MongoDB分片


准备工作

首先我们需要驱动,MongoDB的Java驱动我们可以直接在Maven中央仓库去下载,也可以创建Maven工程添加如下依赖:

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

建议通过Maven来添加依赖,如果自己下载jar,需要下载如下三个jar:

1.org.mongodb:bson:jar:3.5.0

2.org.mongodb:mongodb-driver-core:jar:3.5.0

3.org.mongodb:mongodb-driver:jar:3.5.0

另外,在使用Java操作MongoDB之前,记得启动MongoDB哦~

获取集合

所有准备工作完成之后,我们首先需要一个MongoClient,如下:

MongoClient client = new MongoClient("192.168.248.136", 27017);

然后通过如下方式获取一个数据库,如果要获取的数据库本身就存在,直接获取到,不存在MongoDB会自动创建:

MongoDatabase sang = client.getDatabase("sang");

然后通过如下方式获取一个名为c1的集合,这个集合存在的话就直接获取到,不存在的话MongoDB会自动创建出来,如下:

MongoCollection<Document> c = sang.getCollection("c1");

有了集合之后,我们就可以向集合中插入数据了。

和在shell中的操作一样,我们可以一条一条的添加数据,也可以批量添加,添加单条数据操作如下:

Document d1 = new Document();
d1.append("name", "三国演义").append("author", "罗贯中");
c.insertOne(d1);

添加多条数据的操作如下:

List<Document> collections = new ArrayList<Document>();
Document d1 = new Document();
d1.append("name", "三国演义").append("author", "罗贯中");
collections.add(d1);
Document d2 = new Document();
d2.append("name", "红楼梦").append("author", "曹雪芹");
collections.add(d2);
c.insertMany(collections);

可以修改查到的第一条数据,操作如下:

c.updateOne(Filters.eq("author", "罗贯中"), new Document("$set", new Document("name", "三国演义123")));

上例中小伙伴们也看到了修改器要如何使用,不管是$set还是$inc,用法都一致,我这里不再一个一个演示。也可以修改查到的所有数据,如下:

c.updateMany(Filters.eq("author", "罗贯中"), new Document("$set", new Document("name", "三国演义456")));

可以删除查到的一条数据,如下:

c.deleteOne(Filters.eq("author", "罗贯中"));

也可以删除查到的所有数据:

c.deleteMany(Filters.eq("author", "罗贯中"));

Filters里边还有其他的查询条件,都是见名知意,不赘述。

可以直接查询所有文档:

FindIterable<Document> documents = c.find();
MongoCursor<Document> iterator = documents.iterator();
while (iterator.hasNext()) {
    System.out.println(iterator.next());
}

也可以按照条件查询:

FindIterable<Document> documents = c.find(Filters.eq("author", "罗贯中"));
MongoCursor<Document> iterator = documents.iterator();
while (iterator.hasNext()) {
    System.out.println(iterator.next());
}

其他的方法基本都是见名知意,这里不再赘述。

验证问题

上面我们演示的获取一个集合是不需要登录MongoDB数据库的,如果需要登录,我们获取集合的方式改为下面这种:

ServerAddress serverAddress = new ServerAddress("192.168.248.128", 27017);
List<MongoCredential> credentialsList = new ArrayList<MongoCredential>();
MongoCredential mc = MongoCredential.createScramSha1Credential("readuser","sang","123".toCharArray());
credentialsList.add(mc);
MongoClient client = new MongoClient(serverAddress,credentialsList);
MongoDatabase sang = client.getDatabase("sang");
c = sang.getCollection("c1");

MongoCredential是一个凭证,第一个参数为用户名,第二个参数是要在哪个数据库中验证,第三个参数是密码的char数组,然后将登录地址封装成一个ServerAddress,最后将两个参数都传入MongoClient中实现登录功能。

其他配置

在连接数据库的时候也可以设置连接超时等信息,在MongoClientOptions中设置即可,设置方式如下:

ServerAddress serverAddress = new ServerAddress("192.168.248.128", 27017);
List<MongoCredential> credentialsList = new ArrayList<MongoCredential>();
MongoCredential mc = MongoCredential.createScramSha1Credential("rwuser","sang","123".toCharArray());
credentialsList.add(mc);
MongoClientOptions options = MongoClientOptions.builder()
        //设置连接超时时间为10s
        .connectTimeout(1000*10)
        //设置最长等待时间为10s
        .maxWaitTime(1000*10)
        .build();
MongoClient client = new MongoClient(serverAddress,credentialsList,options);
MongoDatabase sang = client.getDatabase("sang");
c = sang.getCollection("c1");

好了,Java操作MongoDB我们就先说到这里,小伙伴们有问题欢迎留言讨论。

参考资料:

1.《MongoDB权威指南第2版》

更多资料请关注公众号:

图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107777.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Thinkphp 查询条件 and 和 or同时使用即复合查询

    Thinkphp 查询条件 and 和 or同时使用即复合查询

    2021年10月28日
    102
  • BS架构和CS架构的优缺点

    BS架构和CS架构的优缺点1、CS、BS架构定义  CS(Client/Server):客户端—-服务器结构。C/S结构在技术上很成熟,它的主要特点是交互性强、具有安全的存取模式、网络通信量低、响应速度快、利于处理大量数据。因为客户端要负责绝大多数的业务逻辑和UI展示,又称为胖客户端。它充分利用两端硬件,将任务分配到Client和Server两端,降低了系统的通讯开销。C/S结构的软件需要针对不同的操作系

    2022年6月25日
    26
  • mysql数据库SQL查询语句SELECT详细查询(超详细)「建议收藏」

    mysql数据库SQL查询语句SELECT详细查询(超详细)「建议收藏」常规查询查询所有字段:select*from表名;查询指定字段:select列1,列2,…from表名;使用as给字段起别名:select字段as名字….from表名;查询某个表的某个字段:select表名.字段….from表名;可以通过as给表起别名:select别名.字段….from表名as别名;消除重复行:distinct字段条件查询㈠比较运算符:>,<,>=,<=,=,!=,

    2022年5月18日
    39
  • 简单令牌桶实现

    简单令牌桶实现主要思路:1.创建channel,通过定时器定时往channel中写入令牌,返回令牌桶本身(channel);2.判断请求是否可以拿到令牌;packagemainimport(&quot

    2022年7月2日
    24
  • 常见计算机病毒类型及原理「建议收藏」

    常见计算机病毒类型及原理「建议收藏」杀毒软件是根据什么来进行病毒判断并查杀得呢?病毒检测的方法在与病毒的对抗中,及早发现病毒很重要。早发现,早处置,可以减少损失。检测病毒方法有:特征代码法、校验和法、行为监测法、软件模拟法这些方法依据的原理不同,实现时所需开销不同,检测范围不同,各有所长。特征代码法特征代码法被早期应用于SCAN、CPAV等著名病毒检测工具中。国外专家认为特征代码法是检

    2022年6月5日
    40
  • java通过cglib动态生成实体bean

    java通过cglib动态生成实体beanDynamicBeanEntity.class动态bean类:packagecom.dym.entity;importnet.sf.cglib.beans.BeanGenerator;importorg.apache.commons.collections.map.MultiValueMap;importjava.lang.reflect.*;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.It

    2022年6月13日
    35

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号