Java操作MongoDB数据库(连接,增删改查)

news2024/9/9 0:33:52
连接背景:需使用第三方类库:mongo-java-driver-3.4.2.jar

不同的MongoDB需要使用的版本jar不同,根据需要可以自己在官网下载适合自己的版本

gson-2.8.8.jar:某些方法需要传入MongoDB所需的Bson对象,可通过Gson,fastjson等方式创建,此处用的Gson

1.连接MongoDB数据库:

返回值:一个数据库连接对象

参数: 参数一:String类型的ip,本地数据库,可写localhost 或者127.0.0.1

参数二:mongoDB的端口号,一般都是27017,根据自己安装端口号填写
MongoClient mc = new MongoClient("localhost",27017);

2.获取所有的数据库:通过连接对象的listDataBaseNames()方法获取
返回值:一个数据库名的集合,String类型,包含三个基本库admin,config,local
还有自己创建的所有数据库
MongoIterabble<String> dblist = mc.listDataBaseNames();
3.获取指定数据库:通过连接对象的getDatabase()获取,
返回值:一个具体的数据库对象
MongoDatabase db = mc.getDatabase("数据库名");
4.得到所有集合:

       注意:MongoDB中的集合类似MYSQL中的表,表中的每条数据都是一个文档(Document对象)

返回值:一个Docement类型的文档集合
ListCollectionsIterable<Document> colllist = db.listCollections();
5.得到指定的数据库集合
返回值:一个具体的数据库集合(MongoDB中的表)
MongoCollection<Document> coll = db.getCollection("集合名");
6.释放资源

注意:作为连接对象,使用完必须关闭,否则浪费资源

mc.close()
7.java操作mongoDB添加数据:

首先,我们先要 建立连接,获取到所使用的数据库以及集合(MongoDB中的集合,类似表)

MongoDB的连接驱动为我们提供了insertOne和insertmany方法,可一次添加一条或者多条数据

但是方法内部必须是一个Document的对象,或者Document对象组成的集合

        MongoClient mc = new MongoClient("localhost",27017);
        MongoDatabase db  = mc.getDatabase("myschool");
        MongoCollection<Document> teacher = db.getCollection("teacher");
        //添加一条数据
//        Document doc = new Document();
//        doc.append("tname", "老刘");
//        doc.append("tsex", "男");
//        doc.append("tbir", new Date());
//        doc.append("tage", 40);
//        teacher.insertOne(doc);
        //添加多条数据
        Document doc1 = new Document();
        doc1.append("tname", "老杨");
        doc1.append("tbir", "1992-2-2");
        doc1.append("tage", 28);
        
        Document doc2 = new Document();
        doc2.append("tname", "老王");
        doc2.append("tsex", "男");
        doc2.append("tbir", "1991-2-3");
        doc2.append("tage", 32);
        
        Document doc3 = new Document();
        doc3.append("tname", "小彭");
        doc3.append("tsex", "男");
        doc3.append("tbir", "2002-2-3");
        doc3.append("tage", 22);
        
        List<Document> dolist = Arrays.asList(doc1,doc2,doc3);
        teacher.insertMany(dolist);
        System.out.println("添加成功");
        mc.close();

8.java操作MongoDB删除数据:

同样的,我们先获取连接,使用数据库,以及集合对象,以及Document对象,将删除数据的条件添加至doc对象中,在调用方法deleteOne或者deleteMany删除

注意:无论删除多条还是单条数据,都有返回值,DeleteResult对象,

通过调用getDeletedCount()可得到删除记录的行数

        MongoClient mc = new MongoClient("localhost",27017);
        MongoDatabase db = mc.getDatabase("myschool");
        MongoCollection<Document> coll = db.getCollection("teacher");
        Document b1 = new Document();
        b1.append("tname", "老王");

        //只会删除编号最小的
        DeleteResult deleteOne = coll.deleteOne(b1);
        long count = deleteOne.getDeletedCount();
        System.out.println(count);
        //删除多条数据
        DeleteResult deleteMany = coll.deleteMany(b1);
        long count = deleteMany.getDeletedCount();
        System.out.println(count);
        mc.close();

9.java操作MongoDB修改数据:

同样的,我们先获取连接,使用数据库,以及集合对象,以及Document对象,将删除数据的条件添加至doc对象中,在调用方法updateMany方法修改

此方法需要两个参数:

参数一:Bson对象,利用GSON的Filter类,创建,作为筛选数据的条件

参数二:作为要修改的值

注意:此方法返回的updateResult对象,可获取多个结果

matchedCount:匹配到数据的行数

modifiedCount:修改的数量;

包括没匹配到,但是直接添加的方法。详情参考我的贴子MongoDB学习总结

                    MongoClient mc = new MongoClient("localhost",27017);
                MongoDatabase db = mc.getDatabase("myschool");
                MongoCollection<Document> coll = db.getCollection("teacher");
                //修改单条数据
                Bson b1 = Filters.eq("tname","老刘");
                Document doc = new Document();
                doc.append("$set", new Document("tage",51));

                UpdateResult updateOne = coll.updateMany(b1, doc);
                long matchedCount = updateOne.getMatchedCount();
                long modifiedCount = updateOne.getModifiedCount();
                System.out.println(matchedCount);
                System.out.println(modifiedCount);

9.java操作MongoDB查询数据:

此外我们需要利用GSON可以将一些内容直接变为需要的Bson对象。

MongoClient mc = new MongoClient("localhost",27017);
        MongoDatabase db = mc.getDatabase("myschool");
        MongoCollection<Document> coll = db.getCollection("teacher");
        //条件
        //Bson b1 = Filters.eq("tname","老杨");
        //模糊查询
        //以什么开头 ^
        //以什么结尾  $
        Bson b1 = Filters.regex("tname","老");
        //再加分页
//        FindIterable<Document> find = coll.find(b1).skip((2-1)*3).limit(3);
        
        FindIterable<Document> find = coll.find().sort(new Document("tage",1));
        for(Document doc : find) {
            System.out.println(doc);
        }
        mc.close();

此处,我们学习到此,另外还包含了orm关系映射的学习,等等,再次不一一介绍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1958560.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为项目管理工具集

华为项目管理10大模板是一套被广泛认可和使用的项目管理工具集&#xff0c;它包含了在项目管理过程中常用的各种表格和文档模板。这些模板旨在帮助项目经理更有效地规划、执行和监控项目&#xff0c;确保项目的成功交付。 虽然具体的模板内容可能会有所不同&#xff0c;但根据…

51 单片机的Keil5软件

1. KEIL C51 软件获取 博主网盘下载&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1YBfrRh2L7SIehS5xLQkAow?pwd4211 提取码&#xff1a;4211 也可以在 KEIL 的官网上下载&#xff1a;http:// https://www.keil.com/download/product/ 打开界面如下图所示&#xff1…

机器学习(二十三):决策树和决策树学习过程

一、决策树 下面是数据集&#xff0c;输入特征是耳朵形状、脸形状、是否有胡子&#xff0c;输出结果是是否为猫 下图是决策树&#xff0c;根据耳朵形状、脸形状、是否有胡子这几个特征&#xff0c;建立决策树&#xff0c;从根节点一步步预测结果。 上图中&#xff0c;每一个椭…

[硬件]—电感传感器

电感传感器 1.概述 工作基础&#xff1a;电磁感应&#xff0c;即利用线圈自感或互感的改变来实现非电量测量。工作原理&#xff1a; 被测物理量&#xff08;非电量&#xff1a;位移、振动、流量&#xff09;&#xff1b;线圈自感系数L/互感系数M&#xff1b;电压或电流&#…

QT常用的控件(二)

QT的常用控件 一.按钮类控件1.1 Push Button代码示例: 带有图标的按钮代码示例: 带有快捷键的按钮代码示例: 按钮的重复触发 1.2 Radio Button代码示例: 选择性别代码示例: click, press, release, toggled 的区别代码示例: 单选框分组 1.3 Check Box代码示例: 获取复选按钮的取…

邮件攻击案例系列四:某金融企业遭遇撒网式钓鱼邮件攻击

案例描述 2023 年 3 月末&#xff0c;某知名投资公司业务经理李先生先后收到两封看似是来自邮件服务商和公司网络安全部门发出的邮件&#xff0c;标题是“紧急&#xff1a;邮箱安全备案更新通知”。邮件内容称&#xff0c;由于最近公司内部系统升级&#xff0c;所有员工必须重…

【微信小程序实战教程】之微信小程序的配置文件详解

小程序的配置文件 对于有过服务端开发的程序员来说&#xff0c;肯定对“约定优于配置”并不陌生&#xff0c;这是一种按约定编程的软件设计范式&#xff0c;目的在于减少软件开发者做决定的数量。而微信小程序正好与这种软件设计范式的理念相反&#xff0c;小程序是一种“配置…

java将map转json字符串或者再将json字符串转回map,java将对象转json字符串或者互想转换,对象集合和json字符串互转

1.导入hutool工具依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version></dependency>2.直接复制一下代码运行 import cn.hutool.json.JSONUtil;import java.util.Ar…

【C语言报错已解决】Format String Vulnerability

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引言 在日常开发中&#xff0c;我们经常会遇到各种各样的bug&#xff0c;其中格式化字符串漏洞报错可能是最让人头疼的一种。这…

谷歌(google)又出新功能了,快来学

谷歌开发客户这个算是每个外贸业务必备的几个基础技能之一了&#xff0c;大家对谷歌这块的用法多少都有些了解。最近谷歌更新了一个功能&#xff0c;类似于商机推荐的功能&#xff0c;我带大家来了解一下。 我们搜索公司之后&#xff0c;他会展示其他用户搜索过的一些信息。大家…

高职院校大数据人才培养成果导向系统构建、实施要点与评量方法

一、引言 在当今信息化快速发展的背景下&#xff0c;大数据已成为推动社会进步和产业升级的重要力量。为满足社会对大数据人才的需求&#xff0c;高职院校纷纷开设大数据相关专业&#xff0c;并致力于探索科学有效的人才培养模式。本文立足于我国信息化与智能化发展趋势&#…

彻底解决WPS右键没有新建文件的问题

1、综合解决 这个教程能解决大部分的问题彻底解决WPS右键没有新建文件的问题 2、作者补充 作者的教程没有那么麻烦

【java】 力扣 最后一个单词的长度

目录 题目链接题目描述代码 题目链接 58.最后一个单词的长度 题目描述 代码 public int lengthOfLastWord(String s) {int n s.length();int count 0;if(s null ||s.length() 0){return 0;}for(int i n-1;i>0;i--){if(s.charAt(i) ){if(count 0) continue;break;}count…

在pytroch中使用CIFAR10完成完整的模型训练套路

模型训练套路&#xff1a; 1.准备数据集2.加载数据集3.搭建神经网络4创建损失函数5.优化器6.设置训练网络的一些参数7.添加tensorboard&#xff08;方便观察&#xff09;8.开始训练.测试9.保存神经网络 准备数据 #准备数据集 dataset_traintorchvision.datasets.CIFAR10("…

外星人入侵_外星人

项目_外星人入侵_外星人 1创建第一个外星人1.1创建Alien类1.2创建Alien实例1.3让外星人出现在屏幕上 2创建一群外星人2.1确定一行可以容纳多少外星人2.2 创建多行外星人2.3创建外星人群2.4重构create_fleet()2.5添加行 3让外星人群移动3.1向右移动外星人3.2创建表示外星人移动方…

迷你世界魔方模型快速制作

做六个不一样颜色的顶部 --黄&#xff0c;绿&#xff0c;红&#xff0c;蓝&#xff0c;橙&#xff0c;白 --local ids{4000,3999, 3998,3997,3996,3995} 游戏脚本运行上一期文章 local x0,y0,z0-39,7,10--起点坐标 --框架、底面、侧面1-4、顶面 local id{682,671,681,680,66…

消息队列rabbitmq的使用

前提条件&#xff1a;环境安装amqp和安装rabbitmq sudo apt-get update sudo apt-get install rabbitmq-amqp-dev 1、创建CMakeLists.txt文件 # Copyright (c) Huawei Technologies Co., Ltd. 2019. All rights reserved.# CMake lowest version requirement cmake_minimum_…

tof系统标定流程之lens标定

1、lens标定详解 为什么在标定tof时需要进行lens的标定,可以说lens标定是一个必不可少的步骤,tof模组也是有镜头的,镜头的畸变会导致进入的光线出现偏差,最终照射到tof芯片表面导致深度图的分布出现畸变,通常是枕形畸变。例外一个用途在于,在计算fppn误差环节需要知道镜头…

机器学习算法与Python实战 | 两行代码即可应用 40 个机器学习模型--lazypredict 库!

本文来源公众号“机器学习算法与Python实战”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;两行代码即可应用 40 个机器学习模型 今天和大家一起学习使用 lazypredict 库&#xff0c;我们可以用一行代码在我们的数据集上实现许多…

【数据结构】队列(链表实现 + 力扣 + 详解 + 数组实现循环队列 )

Hi~&#xff01;这里是奋斗的明志&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f331;&#x1f331;个人主页&#xff1a;奋斗的明志 &#x1f331;&#x1f331;所属专栏&#xff1a;数据结构 &#x1f4da;本系列文章为个人学…