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

MongoDB(一)

文章目录

  • 一、MongoDB
    • 1、概述
    • 2、官方版本
    • 3、简要历史
    • 4、主要特点
    • 5、支持语言
  • 二、怎么使用
    • 1、连接MongoDB
    • 2、基础命令使用
        • 1. 创建数据库
        • 2. 创建集合
        • 3、新增一个数据
        • 3、查看当前集合占用内存
        • 4、到期时间14天
    • 3、java基础使用案例
        • 1、连接测试
        • 2、新增日志测试
        • 3、查询测试
  • 参考文章
  • 参考


注:java使用视角

一、MongoDB

1、概述

MongoDB 是一种可获取源代码、跨平台、面向文档的数据库程序(可以叫做文档数据库【官网是这样说】)。 作为一种 NoSQL 数据库产品,MongoDB 使用类 JSON文档和可选模式。 它支持分片、复制和 ACID 事务(从 4.0 版开始)等功能。 MongoDB Atlas 是其托管云服务,在AWS、Google Cloud Platform 和 Microsoft Azure 上运行。
当前版本采用服务器端公共许可证(SSPL)授权。 MongoDB 是 MACH 联盟的成员。

  • MongoDB社区版是免费的,支持Windows、Linux和macOS三种操作系统。许多Linux包管理系统曾经包含MongoDB的包。2018年因许可证变更,MongoDB不再属于开源软件,Debian、Fedora和Red Hat Enterprise Linux等Linux发行版已从软件存储库中移除了MongoDB。

  • MongoDB使用内存映射文件,32位系统上限制大小为2GB的资料,64位支持更大的资料。MongoDB的核心构件只能在小端序系统上运行,客户端库可以在小端序和大端序的系统上运行。

  • MongoDB自身的设计可以支持大量的瞬间读写能力,所以多用来做缓存,日志等

2、官方版本

  1. MongoDB Community Server 社区版 【适用于 Windows、Linux 和 macOS】
  2. MongoDB Enterprise Server 商业版本 【适用于 Windows、Linux 和 macOS】
  3. MongoDB Atlas 云服务版【Atlas 可在 AWS、Microsoft Azure 和 Google Cloud Platform 等云服务上运行,本文主要内容和Atlas我关】

3、简要历史

  • 美国软件公司 10gen 于 2007 年开始开发 MongoDB,作为其计划中的平台即服务 (PaaS)产品的组成部分。
  • 2009 年,该公司转向开源开发模式,并开始提供商业支持和其他服务。
  • 2013 年,10gen 更名为 MongoDB Inc.
  • 2018年因许可证变更(SSPL),MongoDB不再属于开源软件
  • 2019年10月30日,MongoDB与阿里云达成合作,为阿里云客户提供MongoDB即服务解决方案。客户可以使用阿里巴巴全球数据中心的托管服务。

SSPL 不被开放源代码促进会(OSI)、Red Hat 或Debian 认为是开源软件,因为上述规定对特定使用领域存在歧视。对其堆栈中使用专有软件的软件用户具有歧视性,因为该许可证要求将与服务交互的每个部分开源,而在这些情况下这是不可能的。这违反了开放源代码促进会使用的开放源代码 定义中的标准61和 92

2022 年 3 月 10 日,MongoDB 警告其在俄罗斯和白俄罗斯的用户,由于美国因俄乌战争而实施的制裁,他们在 MongoDB
Atlas 平台上存储的数据将被销毁。

4、主要特点

  1. Ad-hoc queries 临时查询
    MongoDB 支持字段查询、范围查询和正则表达式搜索。

  2. Indexing 索引
    可以使用主索引和二级索引进行索引。

  3. Replication 主副本复制
    MongoDB可以创建单个副本或多个,默认情况下读写操作都在主题中进行,副本会全量复制主题中的操作,当主体发生故障时,副本集会自动执行选举过程,选择其中一个辅助副本成为新的主体。辅助副本可以选择提供读取操作,但默认情况下,该数据仅具有最终一致性。如果复制的 MongoDB 部署只有一个辅助成员,则必须在该集合中添加一个称为仲裁器的单独守护进程。 因此,理想的分布式 MongoDB 部署至少需要三个独立的服务器,即使只有一个主服务器和一个辅助服务器。

  4. Load balancing 负载均衡
    MongoDB 使用分片技术实现水平扩展。 用户选择一个分片键,它决定了集合中数据的分布方式。数据被拆分成不同的范围(基于分片键),并分布到多个分片上,这些分片是主分片,并包含一个或多个副本。或者,也可以将分片键进行哈希运算,映射到具体的分片上,从而实现数据均匀分布。

  5. File storage 文件存储
    MongoDB 可以用作文件系统,称为GridFS,具有在多台机器上存储文件的负载平衡和数据复制功能。(GridFS不支持事务)

  6. Aggregation 聚合
    支持 聚合管道、map-reduce 函数和单一用途聚合方法。

  7. Server-side JavaScript execution JSON执行命令

  8. Capped collections 上限集合
    MongoDB 支持固定大小的集合,称为上限集合。此类集合会保持插入顺序,并且一旦达到指定大小,其行为将类似于循环队列。

  9. Transactions 事务
    AICD事务

5、支持语言

MongoDB有官方的驱动如下:

  • C
  • C++
  • C#
  • Erlang
  • Haskell
  • Java
  • JavaScript
  • Lisp
  • fibjs
  • node.JS
  • Perl
  • PHP
  • Python
  • Ruby
  • Scala
  • Go
  • Rust

二、怎么使用

安装方式不在赘述

1、连接MongoDB

MongoDB Shell (mongosh) 是一个 JavaScript 和 Node.js REPL 环境,
用于与Atlas 本地或其他远程主机上的 MongoDB 部署进行交互。使用 MongoDB Shell 测试查询,并与 MongoDB
数据库中的数据进行交互。

^^^^^^这是官网的文档中推荐的一个连接 MongoDB的工具,实际操作中有很多方式,

例如直接使用DataGrip或者MongoDB compassd
datagrip连接MongoDB图在这里插入图片描述

MongoDBcompass连接图在这里插入图片描述

admin,config,local是MongoDB的三个默认数据库

spring连接

spring:data:mongodb:uri: mongodb://root:密码@127.0.0.1:27017/数据库?authSource=admin

默认没密码可以直接 mongodb://127.0.0.1:27017
root用户是admin下的用户,使用他连接其他数据库需要指明当前用户所属数据库 authSource=admin

2、基础命令使用

1. 创建数据库

(mg中并没有明确的创建语句,通过use切换数据库可以切换到没有创建的数据库中,从而实现创建数据库的操作)

use databaseName;
2. 创建集合
db.createCollection()
3、新增一个数据
db.集合名称.insertOne({内容})
3、查看当前集合占用内存
db.集合名称.storageSize()
4、到期时间14天

必须要有时间字段

db.集合.createIndex({ timestamp: 1 },{ expireAfterSeconds: 1209600 } // 14天 = 14 * 24 * 3600 秒
)

3、java基础使用案例

1、连接测试
    public static void main(String[] args) {String uri = "mongodb://127.0.0.1:27017";try (MongoClient client = MongoClients.create(uri)) {MongoDatabase db = client.getDatabase("admin");// 执行一个简单操作:列出所有数据库名称List<String> databaseNames = client.listDatabaseNames().into(new ArrayList<>());System.out.println("✅ 成功连接 MongoDB!");System.out.println("可用数据库: " + databaseNames);MongoCollection<Document> httpAccessLogs = db.getCollection("test2");// 可选:尝试创建集合或插入数据db.createCollection("test_log");System.out.println("📌 已创建 test_log 集合");} catch (Exception e) {System.err.println("❌ 连接失败: " + e.getMessage());e.printStackTrace();}}
2、新增日志测试

先创建实体

@Data
@Document(collection = "集合名称")
public class HttpAccessLogVo {@Idprivate String id;private String path;         private int status;       private String requestBody;private String responseBody;@Indexed(name = "timestamp_index", expireAfter = "14d")//到期时间14天private LocalDateTime timestamp;      }

Spring中有管理好的MongoTemplate

 HttpAccessLogVo httpLog = new HttpAccessLogVo();mongoTemplate.insert(httpLog);
3、查询测试
      Query query = new Query();query.addCriteria(Criteria.where("path").is( logDTO.getPath()));query.addCriteria(Criteria.where("status").is( logDTO.getStatus()));query.addCriteria(Criteria.where("timestamp").gte(localDateTime1).lte(localDateTime2));TerminatingFind<HttpAccessLogVo> matching =  mongoTemplate.query(HttpAccessLogVo.class).matching(query);List<HttpAccessLogVo> list = matching.all();

参考文章

个人笔记,不同意见,望有交流
直接可以点击跳转连接
官网https://www.mongodb.com/

https://en.wikipedia.org/wiki/MongoDB

参考


  1. 不歧视领域 许可证不能限制任何人将程序用在某个特定的领域。例如,不能要求人们不可以把程序用在商业领域或者基因研究。 ↩︎

  2. 许可证不能限制其他软件 许可证不得对与许可软件一起分发的其他软件施加限制。例如,许可证不得坚持在同一介质上分发的所有其他程序必须是开源软件。 ↩︎

http://www.lryc.cn/news/585574.html

相关文章:

  • “28项评测23项SOTA——GLM-4.1V-9B-Thinking本地部署教程:10B级视觉语言模型的性能天花板!
  • 【SpringBoot】 整合MyBatis+Postgresql
  • 瀚高数据库提交数据后,是否需要COMMIT(APP)
  • 微信小程序核心知识点速览
  • Android simpleperf生成火焰图
  • 《数据库》MySQL备份回复
  • 神经网络的参数初始化
  • 鸿蒙app 开发中的Record<string,string>的用法和含义
  • Ubuntu 24.04上安装 Intelligent Pinyin 中文输入法
  • 模拟心电图采样数据
  • 【SpringAI】6.向量检索(redis)
  • 用FunctionCall实现文件解析(一):环境准备与基础知识
  • 如何使用Fail2Ban阻止SSH暴力破解
  • vue3+express联调接口时报“\“username\“ is required“问题
  • 获取华为开源3D引擎 (OpenHarmony),把引擎嵌入VUE中
  • Spring Boot中请求参数读取方式
  • AIC8800M40低功耗wifi在ARM-LINUX开发板上做OTA的调试经验
  • (六)复习(OutBox Message)
  • ParaCAD 笔记 png 图纸标注数据集
  • 设计模式(结构型)-适配器模式
  • jenkins部署springboot+Docker项目
  • 力扣网编程134题:加油站(双指针)
  • [实战]调频三角波和锯齿波信号生成(完整C代码)
  • leetcode-hot100(283.移动零)
  • 力扣面试150(29/100)
  • OA系统中的搜索功能方案:简单搜索vs高级搜索
  • SpringDataRedis入门
  • c++——浅拷贝和深拷贝、浅赋值和深赋值
  • Django快速入门搭建网站
  • 经典同步问题详解