MongoDB增删改查,复杂查询案例分析

以下是使用 Java 对 MongoDB 进行增删改查操作以及复杂查询案例分析:

一、添加依赖

在 Maven 项目中添加 MongoDB Java 驱动依赖:

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

二、连接 MongoDB 数据库

import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoDatabase;public class MongoApp {public static void main(String[] args) {// 创建 MongoDB 客户端连接MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017");// 获取数据库MongoDatabase database = mongoClient.getDatabase("yourDatabaseName");}
}

三、插入数据(Insert)

  1. 插入单个文档:
    import org.bson.Document;public class MongoApp {public static void main(String[] args) {// 创建 MongoDB 客户端连接和获取数据库(如上述代码)// 插入单个文档Document userDoc = new Document("name", "Tom").append("age", 28).append("email", "tom@example.com");database.getCollection("users").insertOne(userDoc);}
    }
  2. 插入多个文档:
    import org.bson.Document;
    import java.util.ArrayList;
    import java.util.List;public class MongoApp {public static void main(String[] args) {// 创建 MongoDB 客户端连接和获取数据库(如上述代码)// 插入多个文档Document user1 = new Document("name", "Jerry").append("age", 25).append("email", "jerry@example.com");Document user2 = new Document("name", "Lucy").append("age", 32).append("email", "lucy@example.com");List<Document> userList = new ArrayList<>();userList.add(user1);userList.add(user2);database.getCollection("users").insertMany(userList);}
    }

四、删除数据(Delete)

  1. 删除单个文档:
    import org.bson.Document;public class MongoApp {public static void main(String[] args) {// 创建 MongoDB 客户端连接和获取数据库(如上述代码)// 删除单个文档database.getCollection("users").deleteOne(new Document("name", "Tom"));}
    }
  1. 删除多个文档:
    import org.bson.Document;public class MongoApp {public static void main(String[] args) {// 创建 MongoDB 客户端连接和获取数据库(如上述代码)// 删除多个文档database.getCollection("users").deleteMany(new Document("age", { $gt: 30 }));}
    }

五、更新数据(Update)

  1. 更新单个文档的部分字段:
    import org.bson.Document;public class MongoApp {public static void main(String[] args) {// 创建 MongoDB 客户端连接和获取数据库(如上述代码)// 更新单个文档的部分字段database.getCollection("users").updateOne(new Document("name", "Jerry"),new Document("$set", new Document("age", 26)));}
    }
  2. 更新多个文档的部分字段:
    import org.bson.Document;public class MongoApp {public static void main(String[] args) {// 创建 MongoDB 客户端连接和获取数据库(如上述代码)// 更新多个文档的部分字段database.getCollection("users").updateMany(new Document(),new Document("$set", new Document("email", new Document("$replaceAll", new Document("input", "$email").append("find", "@example.com").append("replace", "@newdomain.com")))));}
    }

六、查询数据(Find)

  1. 基本查询:
    import org.bson.Document;
    import com.mongodb.client.FindIterable;
    import com.mongodb.client.MongoCursor;public class MongoApp {public static void main(String[] args) {// 创建 MongoDB 客户端连接和获取数据库(如上述代码)// 基本查询FindIterable<Document> allUsers = database.getCollection("users").find();MongoCursor<Document> cursor = allUsers.iterator();while (cursor.hasNext()) {System.out.println(cursor.next());}}
    }
  2. 投影查询(只返回指定字段):
    import org.bson.Document;
    import com.mongodb.client.FindIterable;
    import com.mongodb.client.MongoCursor;public class MongoApp {public static void main(String[] args) {// 创建 MongoDB 客户端连接和获取数据库(如上述代码)// 投影查询FindIterable<Document> userNamesAndAges = database.getCollection("users").find(new Document(), new Document("name", 1).append("age", 1));MongoCursor<Document> cursor = userNamesAndAges.iterator();while (cursor.hasNext()) {System.out.println(cursor.next());}}
    }

七、复杂查询案例分析

  1. 多条件查询:假设我们有一个商品集合products,文档包含namecategorypricestock等字段。我们要查询特定类别(如 “电子产品”)且价格在某个区间(如 100 到 500)并且有库存的商品。
    import org.bson.Document;
    import com.mongodb.client.FindIterable;
    import com.mongodb.client.MongoCursor;public class MongoApp {public static void main(String[] args) {// 创建 MongoDB 客户端连接和获取数据库(如上述代码)// 多条件查询FindIterable<Document> productsQuery = database.getCollection("products").find(new Document("category", "电子产品").append("price", new Document("$gte", 100).append("$lte", 500).append("stock", new Document("$gt", 0)));MongoCursor<Document> cursor = productsQuery.iterator();while (cursor.hasNext()) {System.out.println(cursor.next());}}
    }
  2. 排序和分页查询:假设我们要查询商品集合,按照价格降序排列,每页显示 10 个商品,获取第二页的内容。
    import org.bson.Document;
    import com.mongodb.client.FindIterable;
    import com.mongodb.client.MongoCursor;
    import com.mongodb.client.model.Sorts;
    import com.mongodb.client.model.SkipLimit;public class MongoApp {public static void main(String[] args) {// 创建 MongoDB 客户端连接和获取数据库(如上述代码)// 排序和分页查询FindIterable<Document> sortedAndPaginatedProducts = database.getCollection("products").find().sort(Sorts.descending("price")).skip(10).limit(10);MongoCursor<Document> cursor = sortedAndPaginatedProducts.iterator();while (cursor.hasNext()) {System.out.println(cursor.next());}}
    }
  3. 聚合查询(复杂数据分析):假设我们想统计每个类别下的商品数量以及平均价格。
    import org.bson.Document;
    import com.mongodb.client.MongoCollection;
    import com.mongodb.client.MongoDatabase;
    import com.mongodb.client.AggregateIterable;
    import com.mongodb.client.MongoCursor;public class MongoApp {public static void main(String[] args) {// 创建 MongoDB 客户端连接和获取数据库(如上述代码)// 聚合查询MongoCollection<Document> collection = database.getCollection("products");AggregateIterable<Document> categoryStats = collection.aggregate(java.util.Arrays.asList(new Document("$group", new Document("_id", "$category").append("count", new Document("$sum", 1)).append("averagePrice", new Document("$avg", "$price"))));MongoCursor<Document> cursor = categoryStats.iterator();while (cursor.hasNext()) {System.out.println(cursor.next());}}
    }

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

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

相关文章

CAN总线物理层特性详细分析

目录 1. 简介 2. CAN总线拓扑图 3. CAN硬件电路 4. CAN电平标准 5. CAN收发器-TJA1050&#xff08;高速CAN&#xff09; 6. CAN物理层特性 1. 简介 CAN总线&#xff08;Controller Area Network Bus&#xff09;控制器局域网总线&#xff0c;是由BOSCH公司开发的一…

2024AAAI | DiffRAW: 利用扩散模型从手机RAW图生成单反相机质量的RGB图像

文章标题&#xff1a;《DiffRAW: Leveraging Diffusion Model to Generate DSLR-Comparable Perceptual Quality sRGB from Smartphone RAW Images》 原文链接&#xff1a;DiffRAW 本文是清华大学深圳研究院联合华为发表在AAAI-2024上的论文&#xff08;小声bb&#xff1a;华…

idea出现的问题

1.idea正常的运行,但是debug失败 原因&#xff1a;debug模式中使用的jdk和你在环境变量中配置的不是同一个jdk。或者说三处地方修改一致即可 1.File/Project Structure/Project Settings/Modules中的SDK 2.File/Project Structure/Platform Settings 中的SDKS 3.Run/Debug Conf…

uni-app之数据驱动的picker选择器( uni-data-picker)之可以选择到任意级别

背景说明 uni-app 官方的插件市场有数据驱动选择器&#xff0c;可以用作多级分类的场景。本人引入插件后&#xff0c;发现&#xff0c;在h5和微信小程序都只能选择到叶子级。而在给出的官方组件示例中确并非如此。 以选择年级&#xff0c;而不选择班级。然后&#xff0c;想试试…

vue3如何修改element ui input中type属性为textarea的高度

效果&#xff1a; 方法一&#xff1a;直接使用autosize <el-input:maxlength"500":autosize"{ minRows: 5, maxRows: 5 }"type"textarea"v-model"form.description"placeholder"请输入描述"></el-input> 方法二…

紫光展锐携手上赞随身Wi-Fi,让5G触手可及

近年来&#xff0c;随着各类移动应用层出不穷&#xff0c;人们对随时随地上网的需求日益增强&#xff0c;随身 Wi-Fi 设备以其便捷性、灵活性和相对较低的成本&#xff0c;成为用户满足办公、社交、娱乐等多元化需求的重要工具。5G技术的逐步普及为随身Wi-Fi市场注入了新的活力…

第四十三章 Vue之mapMutations简化mutations操作

目录 一、引言 二、完整代码 2.1. App.vue 2.2. main.js 2.3. Son1.vue 2.4. Son2.vue 2.5. index.js 一、引言 本章节我们通过掌握辅助函数mapMutations&#xff0c;来简化前面章节中调用mutations函数的繁琐方式。mapMutations 和 mapState很像&#xff0c;它是把位于…

C++编程语言:抽象机制:派生类(Bjarne Stroustrup)

第20章 派生类(Dirived Classes) 目录 20.1 引言 20.2 派生类 20.2.1 类成员函数 20.2.2 类构造函数和析构函数 20.3 派层次结构 20.3.1 类型域(Type Fields) 20.3.2 虚函数(Virtual Functions) 20.3.3 显式修饰(Explicit Qualification) 20.3.4 覆盖控制(O…

Qt--命令行终端程序开发

提示&#xff1a;本文为学习记录&#xff0c;若有错误&#xff0c;请联系作者&#xff0c;谦虚受教。 文章目录 前言一、头文件二、cpp文件三、使用流程如图所示 总结 前言 Constant dropping wears the stone. 一、头文件 #ifndef TERMINALWIDGET_H #define TERMINALWIDGET_…

一文了解珈和科技在农业遥感领域的服务内容和能力

2020年&#xff0c;农业农村部、中央网信办联合印发了《数字农业农村发展规划&#xff08;2019-2025年&#xff09;》&#xff0c;对数字农业农村建设作出了具体部署。其中&#xff0c;农业遥感作为推进数字农业农村的重要力量贯穿《规划》始终。 今年10月&#xff0c;农业农村…

D65【python 接口自动化学习】- python基础之数据库

day65 SQL-DQL-分组聚合 学习日期&#xff1a;20241111 学习目标&#xff1a;MySQL数据库-- 133 SQL-DQL-分组聚合 学习笔记&#xff1a; 分组聚合 总结 分组聚合的语法 分组聚合的注意事项 group by 中出现了哪个列&#xff0c;哪个列才能出现在select中的非聚合中

初学mongoDB

MongoDB 是一个开源的 NoSQL 数据库&#xff0c;由 C 语言编写。它与传统的关系型数据库不同&#xff0c;MongoDB 使用的是一种基于文档的存储模型&#xff0c;不需要定义固定的表结构&#xff0c;可以灵活地存储和管理大量的非结构化数据。下面是 MongoDB 的一些核心特性&…

DAY59||并查集理论基础 |寻找存在的路径

并查集理论基础 并查集主要有两个功能&#xff1a; 将两个元素添加到一个集合中。判断两个元素在不在同一个集合 代码模板 int n 1005; // n根据题目中节点数量而定&#xff0c;一般比节点数量大一点就好 vector<int> father vector<int> (n, 0); // C里的一…

基于Spring Boot的乡政府管理系统设计与实现,LW+源码+讲解

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装乡政府管理系统软件来发挥其高效地信息处理的作用&#xf…

【NLP】使用 PyTorch 从头构建自己的大型语言模型 (LLM)

读完这篇文章后&#xff0c;你会取得什么成就&#xff1f;你将能够自己构建和训练大型语言模型 (LLM)&#xff0c;同时与我一起编写代码。虽然我们正在构建一个将任何给定文本从英语翻译成马来语的 LLM&#xff0c;但你可以轻松地修改此 LLM 架构以用于其他语言翻译任务。 LLM…

QT打包应用程序文件步骤

QT应用程序&#xff08;.exe&#xff09;打包复制到其他电脑 在QT程序在自己电脑编译好了后&#xff0c;需要打包给其他人。这里介绍一下详细步骤&#xff1a; 确定编译器 搜了很多相关的打包教程&#xff0c;但是还是会出现“应用程序无法正常启动(0xc000007b)”这类错误。经过…

JMeter进阶篇

目录 上篇导航&#xff1a; 总目录&#xff1a; 一、逻辑控制器&#xff1a; 1.逻辑控制器和关联&#xff1a; 2.if逻辑控制器&#xff1a; 3.forEach控制器&#xff1a; 4.循环控制器&#xff1a; 二、关联&#xff1a; 1.xpath&#xff1a; 2.正则表达式提取器&…

homework 2024.11.10 math 1 - math 6

小学1年级和小学6年级数学图形结合&#xff0c;以及习惯养成&#xff0c;过程改进 6年级数学&#xff1a; 一年级数学&#xff1a;

【Linux 31】网络层协议 - IP

文章目录 &#x1f308; 一、IP 协议的基本概念⭐ 1. TCP IP 能保证数据的可靠传输⭐ 2. 如何理解 IP地址⭐ 3. 路由选择⭐ 4. 主机 & 路由器 & 节点 &#x1f308; 二、IP 协议的报头格式⭐ 1. IP 协议的报头格式⭐ 2. 如何将 IP 报头和有效载荷分离⭐ 3. 如何将有效…

Mac中安装OhMyZsh

Mac中安装OhMyZsh 文章目录 Mac中安装OhMyZsh一、Homebrew二、OhMyZsh1、Oh-My-Zsh配置1.1&#xff1a;主题配置1.2&#xff1a;插件配置&#xff08;语法高亮和自动提示&#xff09;1、zsh-autosuggestions&#xff08;需下载安装&#xff09;&#xff1a;高亮显示所有支持的命…