Java 连接 MongoDB 的操作

本贴最后更新于 1553 天前,其中的信息可能已经事过境迁

pwnaTvHyu18XbPs

MongoDB

java 连接 mongoDB 数据库

前提:在连接 mongoDB 前先把 mongoDB 数据库搭好,这里我是使用 CentOS7 搭的 mongoDB,需要参考的小伙伴点击这里:

  1. 导入 pom 依赖
<!--mongo-->
<dependency>
 <groupId>org.mongodb</groupId>
 <artifactId>mongo-java-driver</artifactId>
 <version>3.11.2</version>
</dependency>
  1. 创建链接对象并操作
// 连接服务器
MongoClient mongoClient = new MongoClient("10.2.0.192");
// 获取库 没有则创建
MongoDatabase june = mongoClient.getDatabase("june");
// 获取获取数据库表中的集合 没有则创建
MongoCollection test = june.getCollection("test");

// 对表的操作

// 添加数据 后面可以跟n个 append    增
test.insertOne(new Document().append("name","june").append("age",20));

// 删除数据     删
DeleteResult deleteResult = test.deleteMany(new Document("age", 19));
// 获取删除的条数
System.out.println(deleteResult.getDeletedCount());

// 修改数据     改
test.updateOne(new Document("name","june"),new Document("$set",new Document("age",18)));

// 获取所有数据       查
FindIterable documents = test.find();
for (Document document : documents) {
    System.out.println(document.toJson());
}

// 关闭资源
mongoClient.close();

  1. 使用 Gson 转换查询出来的数据

3.1 导入 pom 依赖

<dependency>
 <groupId>com.google.code.gson</groupId>
 <artifactId>gson</artifactId>
 <version>2.8.6</version>
</dependency>

​ 3.2 使用 Gson

为什么要使用Gson?答案如下

不使用Gson查询出来的数据
Document{{_id=5dd8da5cd6ad5b0e3aaa499e, name=june, age=18}}
Document{{_id=5dd8db35c2ea5c499d91c1ee, name=june, age=20}}
...
只能获取到所有的信息,没办法取其中之一

使用Gson查询出来的数据可以取其中的数据,但前提得创建bean对象
注意:bean对象的id是一个对象(MongoDB默认生成的),所以要创建两个bean对象,示例如下
// 此处使用lombok无法生成get set,原因可能是$符号导致的
public class OId {
    // $oid为已确定的,不能够改变
    private String $oid;
    public String get$oid() {
        return $oid;
    }
    public void set$oid(String $oid) {
        this.$oid = $oid;
    }
    @Override
    public String toString() {
        return "OId{" +
                "$oid='" + $oid + '\'' +
                '}';
    }
}

@Data
public class User {
    private OId _id;
    private String name;
    private Integer age;
}

public class App2 {
    public static void main(String[] args) {
        MongoClient mongoClient = new MongoClient("10.2.0.192");
        MongoDatabase june = mongoClient.getDatabase("june");
        MongoCollection test = june.getCollection("test");
        // 查询所有的文档
        FindIterable documents = test.find();
        // new一个gson对象
        Gson gson = new Gson();
        for (Document document : documents) {
            // 转为json字符串
            String json = document.toJson();
            // 获取对象
            User user = gson.fromJson(json, User.class);
            // 根据键名逐个输出取到的值,键名必须和表匹配,否则拿到null,
            System.out.println(user.get_id().get$oid() + ":" + user.getName() + ":" + user.getAge());
        }
    }
}

// 拿到的结果
5dd8da5cd6ad5b0e3aaa499e:june:18
5dd8db35c2ea5c499d91c1ee:june:20

以如果是 springBoot,只需要在配置文件里面写上一下代码就行了,不需要再像上面一样创建连接

spring:
  data:
    mongodb:
      uri: mongodb://10.1.0.111  这里写的是数据库ip

总结

如果要对拿到的数据进行操作的话,建议使用后者的方法,除了 Gson 以外也可以使用 Jackson、Fastjson 等这类转 json 的工具,效果都是一样的,看个人喜好吧

  • MongoDB

    MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是一个基于分布式文件存储的数据库,由 C++ 语言编写。旨在为应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。

    90 引用 • 59 回帖 • 4 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • ZeroNet

    ZeroNet 是一个基于比特币加密技术和 BT 网络技术的去中心化的、开放开源的网络和交流系统。

    1 引用 • 21 回帖 • 591 关注
  • Logseq

    Logseq 是一个隐私优先、开源的知识库工具。

    Logseq is a joyful, open-source outliner that works on top of local plain-text Markdown and Org-mode files. Use it to write, organize and share your thoughts, keep your to-do list, and build your own digital garden.

    4 引用 • 55 回帖 • 6 关注
  • 机器学习

    机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

    76 引用 • 37 回帖
  • 国际化

    i18n(其来源是英文单词 internationalization 的首末字符 i 和 n,18 为中间的字符数)是“国际化”的简称。对程序来说,国际化是指在不修改代码的情况下,能根据不同语言及地区显示相应的界面。

    7 引用 • 26 回帖 • 1 关注
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    6364 引用 • 28618 回帖 • 264 关注
  • Kotlin

    Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,由 JetBrains 设计开发并开源。Kotlin 可以编译成 Java 字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。在 Google I/O 2017 中,Google 宣布 Kotlin 成为 Android 官方开发语言。

    19 引用 • 33 回帖 • 22 关注
  • uTools

    uTools 是一个极简、插件化、跨平台的现代桌面软件。通过自由选配丰富的插件,打造你得心应手的工具集合。

    5 引用 • 13 回帖
  • jsDelivr

    jsDelivr 是一个开源的 CDN 服务,可为 npm 包、GitHub 仓库提供免费、快速并且可靠的全球 CDN 加速服务。

    5 引用 • 31 回帖 • 33 关注
  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    164 引用 • 407 回帖 • 523 关注
  • 程序员

    程序员是从事程序开发、程序维护的专业人员。

    529 引用 • 3527 回帖
  • 创造

    你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!

    171 引用 • 988 回帖
  • abitmean

    有点意思就行了

    14 关注
  • IDEA

    IDEA 全称 IntelliJ IDEA,是一款 Java 语言开发的集成环境,在业界被公认为最好的 Java 开发工具之一。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。

    180 引用 • 400 回帖
  • Bug

    Bug 本意是指臭虫、缺陷、损坏、犯贫、窃听器、小虫等。现在人们把在程序中一些缺陷或问题统称为 bug(漏洞)。

    76 引用 • 1738 回帖 • 2 关注
  • Sillot

    Sillot (汐洛)孵化自思源笔记,致力于服务智慧新彖乄,具有彖乄驱动、极致优雅、开发者友好的特点
    Github 地址:https://github.com/Hi-Windom/Sillot

    12 引用 • 26 关注
  • InfluxDB

    InfluxDB 是一个开源的没有外部依赖的时间序列数据库。适用于记录度量,事件及实时分析。

    2 引用 • 47 关注
  • Dubbo

    Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,是 [阿里巴巴] SOA 服务化治理方案的核心框架,每天为 2,000+ 个服务提供 3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

    60 引用 • 82 回帖 • 590 关注
  • 支付宝

    支付宝是全球领先的独立第三方支付平台,致力于为广大用户提供安全快速的电子支付/网上支付/安全支付/手机支付体验,及转账收款/水电煤缴费/信用卡还款/AA 收款等生活服务应用。

    29 引用 • 347 回帖 • 2 关注
  • 分享

    有什么新发现就分享给大家吧!

    240 引用 • 1729 回帖
  • 房星科技

    房星网,我们不和没有钱的程序员谈理想,我们要让程序员又有理想又有钱。我们有雄厚的房地产行业线下资源,遍布昆明全城的 100 家门店、四千地产经纪人是我们坚实的后盾。

    6 引用 • 141 回帖 • 548 关注
  • Hprose

    Hprose 是一款先进的轻量级、跨语言、跨平台、无侵入式、高性能动态远程对象调用引擎库。它不仅简单易用,而且功能强大。你无需专门学习,只需看上几眼,就能用它轻松构建分布式应用系统。

    9 引用 • 17 回帖 • 591 关注
  • 禅道

    禅道是一款国产的开源项目管理软件,她的核心管理思想基于敏捷方法 scrum,内置了产品管理和项目管理,同时又根据国内研发现状补充了测试管理、计划管理、发布管理、文档管理、事务管理等功能,在一个软件中就可以将软件研发中的需求、任务、bug、用例、计划、发布等要素有序的跟踪管理起来,完整地覆盖了项目管理的核心流程。

    5 引用 • 15 回帖 • 223 关注
  • 链书

    链书(Chainbook)是 B3log 开源社区提供的区块链纸质书交易平台,通过 B3T 实现共享激励与价值链。可将你的闲置书籍上架到链书,我们共同构建这个全新的交易平台,让闲置书籍继续发挥它的价值。

    链书社

    链书目前已经下线,也许以后还有计划重制上线。

    14 引用 • 257 回帖 • 2 关注
  • Openfire

    Openfire 是开源的、基于可拓展通讯和表示协议 (XMPP)、采用 Java 编程语言开发的实时协作服务器。Openfire 的效率很高,单台服务器可支持上万并发用户。

    6 引用 • 7 回帖 • 87 关注
  • IBM

    IBM(国际商业机器公司)或万国商业机器公司,简称 IBM(International Business Machines Corporation),总公司在纽约州阿蒙克市。1911 年托马斯·沃森创立于美国,是全球最大的信息技术和业务解决方案公司,拥有全球雇员 30 多万人,业务遍及 160 多个国家和地区。

    16 引用 • 53 回帖 • 104 关注
  • 京东

    京东是中国最大的自营式电商企业,2015 年第一季度在中国自营式 B2C 电商市场的占有率为 56.3%。2014 年 5 月,京东在美国纳斯达克证券交易所正式挂牌上市(股票代码:JD),是中国第一个成功赴美上市的大型综合型电商平台,与腾讯、百度等中国互联网巨头共同跻身全球前十大互联网公司排行榜。

    14 引用 • 102 回帖 • 405 关注
  • 又拍云

    又拍云是国内领先的 CDN 服务提供商,国家工信部认证通过的“可信云”,乌云众测平台认证的“安全云”,为移动时代的创业者提供新一代的 CDN 加速服务。

    21 引用 • 37 回帖 • 505 关注