欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > MongoDB

MongoDB

2025/3/25 18:19:56 来源:https://blog.csdn.net/weixin_51040479/article/details/146403207  浏览:    关键词:MongoDB

一、MongoDB简介

1.1 什么是MongoDB?

MongoDB是一个基于分布式文件存储的开源NoSQL数据库系统,由C++语言编写,旨在为Web应用提供可扩展的高性能数据存储解决方案。MongoDB将数据存储为一个文档,数据结构由键值对组成,类似于JSON对象,字段值可以包含其他文档、数组及文档数组。

1.2 MongoDB的核心特性

  • 文档型数据库:数据以BSON(Binary JSON)格式存储
  • 灵活的数据模型:无需预定义模式,字段可以动态添加
  • 强大的查询语言:支持丰富的查询表达式
  • 高性能:支持索引,包括文本搜索和地理空间索引
  • 高可用性:通过复制集提供数据冗余和自动故障转移
  • 水平扩展:通过分片实现数据分布式存储
  • 支持聚合和MapReduce:用于数据处理和分析

1.3 基本概念

  • 数据库(Database):MongoDB中多个集合的物理容器
  • 集合(Collection):类似于关系数据库中的表
  • 文档(Document):类似于关系数据库中的行,使用BSON格式存储
  • 字段(Field):类似于关系数据库中的列
  • 索引(Index):提高查询效率的数据结构
  • 复制集(Replica Set):提供数据冗余和高可用性
  • 分片(Sharding):数据分布式存储的方法

1.4 与传统SQL数据库的比较

特性MongoDB关系型数据库
数据模型文档模型表格模型
数据结构灵活,无模式固定,需要预定义结构
查询语言JSON风格查询SQL
事务支持4.0版本开始支持完全支持
水平扩展原生支持通常需要额外工具
复杂关联查询使用$lookup,性能相对较低通过JOIN支持,性能更好
适用场景大数据量、高并发、弱事务强事务、复杂查询、结构化数据

二、MongoDB基础

2.1 文档结构和BSON

MongoDB使用BSON(Binary JSON)格式存储数据。BSON扩展了JSON模型,提供了更多的数据类型和更高效的编码解码。

一个典型的MongoDB文档结构如下:

{"_id": ObjectId("5f8d3b4e9d3b2c8e9c8b4567"),"name": "张三","age": 30,"email": "zhangsan@example.com","address": {"city": "北京","postal_code": "100000"},"tags": ["开发", "Java", "MongoDB"]
}

2.2 MongoDB支持的数据类型

  • 字符串:UTF-8字符串
  • 整数:32位或64位整数
  • 布尔值:true或false
  • 双精度浮点数:IEEE 754浮点数
  • 数组:值的列表或数组
  • 对象:嵌入式文档
  • 对象ID:12字节的唯一标识符
  • 日期:Unix时间格式(精确到毫秒)
  • Null:表示空值或不存在的字段
  • 正则表达式:使用JavaScript的正则表达式语法
  • 二进制数据:用于存储非UTF-8字符串的二进制数据
  • 代码:JavaScript代码

2.3 基本CRUD操作

创建操作(Create)
// 插入单个文档
db.users.insertOne({name: "李四",age: 25,email: "lisi@example.com"
});// 插入多个文档
db.users.insertMany([{ name: "王五", age: 35, email: "wangwu@example.com" },{ name: "赵六", age: 28, email: "zhaoliu@example.com" }
]);
读取操作(Read)
// 查询所有文档
db.users.find();// 条件查询
db.users.find({ age: { $gt: 30 } });// 查询指定字段
db.users.find({}, { name: 1, email: 1, _id: 0 });// 限制结果数量
db.users.find().limit(5);// 排序
db.users.find().sort({ age: -1 });
更新操作(Update)
// 更新单个文档
db.users.updateOne({ name: "李四" },{ $set: { age: 26, "address.city": "上海" } }
);// 更新多个文档
db.users.updateMany({ age: { $lt: 30 } },{ $inc: { age: 1 } }
);// 替换整个文档
db.users.replaceOne({ name: "王五" },{ name: "王五", age: 36, email: "newwangwu@example.com" }
);
删除操作(Delete)
// 删除单个文档
db.users.deleteOne({ name: "李四" });// 删除多个文档
db.users.deleteMany({ age: { $gt: 30 } });// 删除所有文档
db.users.deleteMany({});

2.4 索引

MongoDB支持多种类型的索引,用于提高查询性能。

// 创建单字段索引
db.users.createIndex({ name: 1 });  // 1表示升序,-1表示降序// 创建复合索引
db.users.createIndex({ name: 1, age: -1 });// 创建唯一索引
db.users.createIndex({ email: 1 }, { unique: true });// 创建文本索引
db.articles.createIndex({ content: "text" });// 创建地理空间索引
db.places.createIndex({ location: "2dsphere" });// 查看集合上的所有索引
db.users.getIndexes();// 删除索引
db.users.dropIndex({ name: 1 });

2.5 聚合操作

MongoDB提供了强大的聚合框架,用于对数据进行转换和计算。

// 简单的聚合示例:按年龄分组并计算平均值
db.users.aggregate([{ $group: { _id: null, avgAge: { $avg: "$age" } } }
]);// 使用多个聚合管道阶段
db.orders.aggregate([{ $match: { status: "completed" } },{ $group: { _id: "$customer_id", totalAmount: { $sum: "$amount" } } },{ $sort: { totalAmount: -1 } },{ $limit: 5 }
]);// 使用$lookup进行关联查询(类似SQL中的JOIN)
db.orders.aggregate([{$lookup: {from: "customers",localField: "customer_id",foreignField: "_id",as: "customer_info"}}
]);

三、Spring Boot简介

3.1 Spring Boot概述

Spring Boot是Spring框架的扩展,简化了基于Spring的应用程序开发。它消除了设置Spring应用程序所需的大量样板代码和配置,使开发人员能够快速启动和运行应用程序。

3.2 Spring Boot的核心特性

  • 自动配置:自动配置Spring应用程序基于类路径上的依赖
  • 起步依赖:简化Maven/Gradle配置
  • 嵌入式服务器:内嵌Tomcat、Jetty或Undertow
  • 生产就绪功能:健康检查、指标、外部化配置

3.3 Spring Data MongoDB

Spring Data MongoDB是Spring Data家族的一部分,专为使用MongoDB数据库的应用程序提供Spring风格的数据访问抽象。它提供了以下功能:

  • 基于接口的数据访问层抽象
  • 无需编写具体实现的Repository支持
  • 基于方法名称的查询构建
  • 自定义查询注解支持
  • MongoDB原生操作集成
  • 地理空间支持
  • 基于MongoDB的审计支持

四、Spring Boot整合MongoDB

4.1 项目依赖配置

在Spring Boot项目中添加MongoDB依赖非常简单,只需在pom.xml文件中添加以下依赖:

<!-- Spring Boot Starter for MongoDB -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

或者在Gradle的build.gradle文件中:

dependencies {implementation 'org.springframework.boot:spring-boot-starter-data-mongodb'
}

4.2 MongoDB连接配置

在Spring Boot的application.propertiesapplication.yml文件中配置MongoDB连接信息:

application.properties:

# MongoDB连接配置
spring.data.mongodb.uri=mongodb://localhost:27017/mydatabase# 或者使用详细配置
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=mydatabase
spring.data.mongodb.username=admin
spring.data.mongodb.password=password
spring.data.mongodb.authentication-database=admin

application.yml:

spring:data:mongodb:uri: mongodb://localhost:27017/mydatabase# 或者使用详细配置#host: localhost#port: 27017#database: mydatabase#username: admin#password: password#authentication-database: admin

4.3 配置MongoDB连接工厂

大多数情况下,Spring Boot的自动配置足以满足需求。但如果需要自定义MongoDB配置,可以创建一个配置类:

import com.mongodb.ConnectionString;
import com.mongodb.MongoClientSettings;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;@Configuration
@EnableMongoRepositories(basePackages = "com.example.repository")
public class MongoConfig {@Beanpublic MongoClient mongoClient() {ConnectionString connectionString = new ConnectionString("mongodb://localhost:27017/mydatabase");MongoClientSettings mongoClientSettings = Mon

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词