当前位置: 首页 > article >正文

MongoDB 入门及实践

MongoDB 入门

        • 一、简介
        • 二、安装与配置
          • 1. 下载与安装
          • 2. 启动 MongoDB
          • 3. 使用 MongoDB Shell
        • 三、基本概念
          • 1. 数据库
          • 2. 集合
          • 3. 文档
          • 4. 字段
        • 四、基本操作
          • 1. 创建数据库
          • 2. 插入数据
          • 3. 查询数据
          • 4. 更新数据
          • 5. 删除数据
        • 五、高级主题
          • 1. 索引
          • 2. 聚合框架
          • 3. 分布式部署
          • 4. 安全性
        • 六、最佳实践
        • 七、Java开发实践
          • 1. 添加 Maven 依赖
          • 2. 建立连接
          • 3. 插入数据
          • 4. 查询数据
          • 5. 更新数据
          • 6. 删除数据
          • 7. 使用索引
          • 8. 聚合管道
          • 9.错误处理与资源管理

一、简介

MongoDB 是一个开源的文档数据库管理系统,属于 NoSQL 数据库的一种类型。它使用 JSON-BSON(Binary JSON)格式来存储数据,提供了高性能、高可用性和易于扩展的特点。MongoDB 支持灵活的文档结构,允许不同的数据存储在同一集合中,并提供丰富的查询语言来进行数据操作。

二、安装与配置
1. 下载与安装

前往 MongoDB 官方网站下载适合您操作系统的版本。对于 Windows、Linux 和 macOS,都有相应的安装包。

2. 启动 MongoDB

启动 MongoDB 的服务端,通常使用命令行工具 mongod 来启动服务。默认情况下,MongoDB 使用本地主机的 27017 端口,并且存储数据在 /data/db 目录下(Linux 和 macOS),Windows 上则是在 C:\data\db

mongod --dbpath /path/to/data/directory

如果需要更改默认设置,可以使用不同的选项来配置 mongod。

3. 使用 MongoDB Shell

MongoDB Shell 是一个命令行工具,用来与 MongoDB 交互。启动 shell 并连接到 MongoDB 服务器:

mongo
三、基本概念
1. 数据库

MongoDB 中的数据库类似于关系数据库中的数据库,用于存储集合和数据。

2. 集合

集合类似于关系数据库中的表,是一个特定数据库下的数据存储单位。集合不需要预先定义,插入数据时会自动创建集合。

3. 文档

文档是 MongoDB 中的基本数据单位,以键值对的形式存储,类似于 JSON 对象。

4. 字段

字段是文档中的名称/值对。字段名必须是字符串,而字段值可以是各种数据类型,包括数组和其他文档。

四、基本操作
1. 创建数据库

MongoDB 在插入数据时自动创建数据库。例如:

use myDatabase

如果 myDatabase 不存在,则会创建一个新的数据库。

2. 插入数据

使用 insertOneinsertMany 方法向集合中插入文档:

db.myCollection.insertOne({
    name: "John Doe",
    age: 30,
    email: "john.doe@example.com"
})
3. 查询数据

使用 find 方法查询数据:

db.myCollection.find({ age: 30 })

可以使用 $and, $or 等逻辑运算符进行更复杂的查询。

4. 更新数据

使用 updateOneupdateMany 方法更新数据:

db.myCollection.updateOne(
    { name: "John Doe" },
    { $set: { age: 31 } }
)
5. 删除数据

使用 deleteOnedeleteMany 方法删除数据:

db.myCollection.deleteOne({ name: "John Doe" })
五、高级主题
1. 索引

为了提高查询效率,可以为集合创建索引:

db.myCollection.createIndex({ age: 1 })

索引可以帮助加速查询速度,但也会影响写入性能和占用更多存储空间。

2. 聚合框架

MongoDB 提供了一个强大的聚合框架,可以执行复杂的数据分析任务:

db.myCollection.aggregate([
    { $match: { age: { $gt: 25 } } },
    { $group: { _id: "$city", totalPeople: { $sum: 1 } } }
])
3. 分布式部署

MongoDB 支持复制集和分片集群,可以用来实现高可用性和水平扩展。

4. 安全性

MongoDB 支持用户身份验证、访问控制和加密等功能来保障数据安全。

六、最佳实践
  • 数据建模:合理设计数据模型,利用 MongoDB 的灵活性来优化查询性能。
  • 性能调优:根据应用程序的需求调整数据库配置,优化索引和查询。
  • 备份与恢复:定期备份数据,并测试恢复流程以确保数据安全。
七、Java开发实践
1. 添加 Maven 依赖

pom.xml 文件中添加 MongoDB Java 驱动的依赖:

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

注意:请根据实际使用的 MongoDB 版本选择合适的驱动版本。

2. 建立连接

使用 MongoClients 类创建一个客户端实例,并指定 MongoDB 服务器的地址和端口:

import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoDatabase;

public class MongoExample {
    public static void main(String[] args) {
        MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017");
        MongoDatabase database = mongoClient.getDatabase("test");
    }
}
3. 插入数据

向集合中插入文档:

import org.bson.Document;
import com.mongodb.client.MongoCollection;

MongoCollection<Document> collection = database.getCollection("documents");
Document doc = new Document("name", "John Doe").append("age", 30);
collection.insertOne(doc);
4. 查询数据

从集合中查询文档:

MongoCursor<Document> cursor = collection.find(eq("name", "John Doe")).iterator();
while (cursor.hasNext()) {
    System.out.println(cursor.next().toJson());
}
5. 更新数据

更新集合中的文档:

Document query = new Document("name", "John Doe");
Document update = new Document("$set", new Document("age", 31));
collection.updateOne(query, update);
6. 删除数据

从集合中删除文档:

collection.deleteOne(new Document("name", "John Doe"));
7. 使用索引

为了提高查询效率,可以在集合上创建索引:

collection.createIndex(Indexes.ascending("name"));
8. 聚合管道

执行聚合查询:

Aggregation pipeline = Aggregation.newPipeline()
    .match(Filters.eq("age", 30))
    .group("$name", Accumulators.sum("total", 1));
AggregationResults<Document> results = collection.aggregate(pipeline).into(new ArrayList<>());
9.错误处理与资源管理

在处理 MongoDB 操作时,应该适当地捕获异常并释放资源,例如关闭迭代器和客户端:

try (MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017")) {
    // 执行数据库操作
} catch (Exception e) {
    // 处理异常
}

http://www.kler.cn/news/329246.html

相关文章:

  • 【cache】浅析四种常用的缓存淘汰算法 FIFO/LRU/LFU/W-TinyLFU
  • MongoDB 聚合管道
  • Springboot3 + MyBatis-Plus + MySql + Vue + ProTable + TS 实现后台管理商品分类(最新教程附源码)
  • Webpack和GuIp打包原理以及不同
  • IDM下载器如何下载网盘文件 IDM下载器支持哪些网盘
  • 【数据库】Java 集成mongodb— MongoTemplate 详解
  • OpenCV图像文件读写(6)将图像数据写入文件的函数imwrite()的使用
  • YOLO11改进|卷积篇|引入可变核卷积AKConv
  • 程序计数器(学习笔记)
  • Docker 进入容器运行命令的详细指南
  • “图像识别技术:重塑生活与工作的未来”
  • Linux:编译,调试和Makefile
  • Spring MVC系统学习(一)——初识Spring MVC框架
  • AIGAME平台的由来与未来展望 —— 蒙特加密基金推动区块链与AI融合创新
  • Redis篇(应用案例 - 短信登录)(持续更新迭代)
  • GEE教程:利用sentinel-2数据和NDVI指数监测火灾
  • Ansible实现剧本远程服务器创建、删除用户
  • SpringGateway(网关)微服务
  • MDM监管锁系统上锁流程
  • Redis 中 String 命令的基础操作
  • 【CKA】一、基于角色的访问控制-RBAC
  • 【分布式微服务云原生】消息队列全解析:原理、应用场景与主流MQ对比
  • 基于Qt/C++UDP 调试软件功能及用途介绍
  • 蓝桥杯【物联网】零基础到国奖之路:十五. 扩展模块之双路ADC
  • Android 利用OSMdroid开发GIS 添加点、线、面和标记点
  • 【STM32】【rt-thread】C函数调用
  • 深入理解机器学习中的 K-均值聚类算法及其优缺点
  • mp取数据,模糊查询redis
  • 对于基础汇编的趣味认识
  • Ubuntu 安装RUST