Java链接MongoDB进行CRUD

news/2024/7/8 3:48:55

文章目录

    • Mongo-Driver
    • 开干
      • 创建一个maven工程,pom文件中添加依赖
      • 编写crud代码

Mongo-Driver

  • Mongo支持多种语言,mongo-driver是mongo官方推出的java连接mongoDB的驱动包,相当于JDBC驱动,通过mongo-driver完成对MongoDB的操作
  • Mongo java快速开始的官网在此 官网的文档虽然很乱七八糟(一篇文档里有太多链接,看着看着就迷失了,但代码写的很清晰),但好歹是官方文档,而且有很多更新的新的API。(唉,要好好学习看官方文档啊,被各种外部的解释文档宠坏了)

开干

话不多说,我们直接开始操作

创建一个maven工程,pom文件中添加依赖

我看好多人给的是添加 mongo-driver的依赖,但官方给的是添加mongo-driver-sync的依赖,所以我们按官方的来

然后因为我用测试代码来进行演示,所以再引入一个junit的包

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongodb-driver-sync</artifactId>
            <version>4.5.1</version>
        </dependency>

编写crud代码

就照着官方文档写就成,还算好理解,懒得分每一个部分了,全部在这里了

package com.dean;

import com.mongodb.client.*;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.Projections;
import com.mongodb.client.model.Sorts;
import com.mongodb.client.model.Updates;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
import org.bson.Document;
import org.bson.conversions.Bson;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.util.ArrayList;
import java.util.List;

public class MongoTest {
    private MongoClient client = null;
    private MongoCollection<Document> collection = null;

    //测试连接数据库
    @Before
    public void connect() {
        //mongo地址
        String uri = "mongodb://192.168.0.108:27017";
        //获取到mongo 客户端
        client = MongoClients.create(uri);
        //根据数据库名称 链接到数据库
        MongoDatabase database = client.getDatabase("common_test");
        //通过数据库 找到数据库下的集合(即表)
        collection = database.getCollection("comment");
        System.out.println("链接Mongo成功");
    }

    //获取表下的所有数据
    @Test
    public void findAll() {
        //通过集合,获得表下的所有数据
        FindIterable<Document> documents = collection.find();
        //通过迭代器 遍历文档
        MongoCursor<Document> iterator = documents.iterator();
        while (iterator.hasNext()) {
            Document document = iterator.next();
            System.out.println(document);
        }
    }

    //向表中插入数据
    @Test
    public void insertOne() {
        //可以看一下Document对象 实际是个LinkedMap
        Document doc = new Document();
        doc.put("_id", "5");
        doc.put("userId", "006");
        doc.put("content", "每次都不知道写什么");
        doc.put("thumbUp", 200.0);
        doc.put("testField", "测试能不能多放一个没定义过的字段");
        collection.insertOne(doc);
        System.out.println("插入一条数据成功");
    }

    //修改数据
    @Test
    public void update() {
        //根据条件选择修改的数据
        Bson filter = Filters.eq("userId", "004");
        Bson updates = Updates.combine(
                Updates.set("content", "这是一个更新字段"),
                Updates.set("thumbUp", 200000.0),
                Updates.currentTimestamp("lastUpdated"));
        //ps:updateOne(匹配到多条数据,也只修改一条数据)
        //updateMany(匹配到多条数据,那么所有数据都会被更新)
        UpdateResult updateResult = collection.updateMany(filter, updates);
        System.out.println(updateResult.getModifiedCount() + "条数据更新成功");
    }

    //删除数据
    @Test
    public void deleteDocument() {
        //构造要删除的数据的条件
        Bson filter = Filters.eq("_id", "5");
        DeleteResult deleteResult = collection.deleteOne(filter);
        System.out.println(deleteResult.getDeletedCount() + "条数据被删除");
    }

    //多条件查询,并限制返回的字段
    @Test
    public void findByCondition() {
        //选择需要返回的字段
        Bson fields = Projections.fields(
                Projections.include("userId", "content", "thumbUp"),
                Projections.excludeId()
        );
        //查询条件
        Bson filter_one = Filters.gt("thumbUp", 2024.0);
        Bson filter_two = Filters.lte("thumbUp", 200000.0);
        List<Bson> filters = new ArrayList<>();
        filters.add(filter_one);
        filters.add(filter_two);
        Bson filter = Filters.and(filters);
        //顺便使用一下count函数
        long count = collection.countDocuments(filter);
        System.out.println(count + "条数据被匹配到");
        MongoCursor<Document> cursor = collection.find(filter)
                .projection(fields)
                .sort(Sorts.descending("thumbUp"))
                .iterator();
        while (cursor.hasNext()) {
            System.out.println(cursor.next().toJson());
        }
        cursor.close();
    }


    //关闭Mongo连接,释放资源
    @After
    public void close() {
        client.close();
        System.out.println("Mongo连接已释放");
    }
}

以上代码本人已经亲自试过了,没半点毛病,所以就不贴截图了,唯一需要注意的点是:把你的表名和数据库名称写对!!!

以上,累了。


http://www.niftyadmin.cn/n/1756366.html

相关文章

SpringBoot整合MongoDB完成增删改查(入门级)

文章目录开干整体文件结构如下创建springBoot项目&#xff0c;pom文件中添加相关依赖yaml文件中配置mongo地址准备一个实体类通过MongoTemplate查询通过MongoRepository的方式查询所有新增数据修改数据分页查询自定义的条件查询一些废话&#xff1a; 上一篇写了java链接MongoDB…

MySQL进阶_1 (体系结构、存储引擎、SQL优化、索引使用)

文章目录MySQL体系结构术语浅解一些缩写Mysql系统自带的数据库元数据MySQL数据库文件存储引擎Mysql存储引擎的特性概览MyISAMInnoDBMEMORYMERGE存储引擎怎么选SQL优化步骤查询SQL的执行效率定位低效率的SQLexplain命令分析执行计划show profile的使用优化器trace工具的使用索引…

MySQL进阶_2(应用优化、缓存优化、内存优化、锁)

文章目录一点前言应用优化连接池减少数据库的访问负载均衡缓存优化概述操作流程查询缓存参数设置查询缓存的使用缓存失效的情况内存优化优化原则内存优化说明MySQL并发度调整锁&#xff08;浅了解一下&#xff09;一点前言 Mysql可以通过调整参数进行调优&#xff0c;所以本篇…

关于打代码的一些些心得

些许废话 零零散散也正式以打代码为生快一年半了&#xff0c;从代码写的稀碎到稍微能总结出一点东西&#xff0c;也算是一个一直在向上缓慢行走的状态了 很难说我喜欢代码这件事&#xff0c;原本选择也只是为了糊口&#xff0c;但从面向百度编程&#xff0c;到一点点写出带着…

VMware Workstation中安装Centos 7,使用NAT模式连接网络

VMware Workstation有三种方式连接网络&#xff0c;其他两种请自行百度&#xff0c;这里着重讲解NAT方式。 从大学开始学Linux&#xff0c;装的Ubuntu&#xff0c;瞎jb地搞了下&#xff0c;就稀里糊涂联网了&#xff0c;后来换成Centos&#xff0c;又重新设置联网&#xff0c;…

CentOs7查看系统已有的用户和用户组

查看用户&#xff1a; cut -d : -f 1 /etc/passwd 查看用户组&#xff1a; cut -d : -f 1 /etc/group 删除xiaoluo这个用户&#xff1a; userdel -r xiaoluo

本地浏览器访问虚拟机中安装的elasticsearch,访问失败

首先检查虚拟机是否开启了&#xff0c;再检查虚拟机中的es是否开启了 首先先介绍一下我的环境&#xff0c;&#xff1a; 1&#xff1a;虚拟机中安装的CentOS7和我的本机可以互相ping通。 2&#xff1a;CentOs7的防火墙被我也关闭了 3&#xff1a;启动es不报错&#xff0c;el…

使用xshell连接本地虚拟机Centos7,ip只能127.0.0.1连接

在虚拟机中使用ip addr查看ip地址&#xff0c;一般192.168.x.x。用xshell连接虚拟机&#xff0c;一直连接不上&#xff0c;但是使用ip为127.0.0.1就可以。 原因如下&#xff1a; 使用NAT模式连接网络&#xff0c;上图的配置文件的ip设置和windows的VM8中设置的ip一样了&#x…