当前位置: 首页 > 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.dtcms.com/a/274871.html

相关文章:

  • 用Python和OpenCV从零搭建一个完整的双目视觉系统(六 最终篇)
  • 【9】PostgreSQL 之 vacuum 死元组清理
  • bash脚本-z检查参数是否为空
  • 雨污管网智慧监测系统网络建设方案:基于SD-WAN混合架构的最佳实践
  • 计算机组成原理:以ADD指令为例讲解微指令执行流程
  • SpringCloud之Eureka
  • 当贝桌面_九联UNT403HS_hi3798mv320处理器安卓9优盘刷机和线刷烧录包
  • 第Y7周:训练自己的数据
  • 洛谷P2042 [NOI2005] 维护数列
  • 可以自定义皮肤的桌面备忘便签软件-滴哦小精灵 v1.4.5
  • 深入理解JVM
  • 视频翻译用什么软件?这里有5个高效推荐
  • 编码技术: PRBS, 8B/10B
  • MCU芯片内部的ECC安全机制
  • 提升你的AI交互技能:使用Anthropic互动提示教程
  • c语言中的数组IV
  • Qt:布局管理器Layout
  • flutter鸿蒙版 环境配置
  • Deekseek 学习笔记
  • 北京-4年功能测试2年空窗-报培训班学测开-第四十八天
  • 信创 CDC 实战 | TiDB 实时入仓难点与解决方案解析(以 ClickHouse 为例)
  • 【面板数据】省级泰尔指数及城乡收入差距测算(1990-2024年)
  • 大模型人类反馈强化学习RLHF 凭什么火出圈?人类反馈 + 强化学习,解锁 AI 行为可控密码
  • 盛世美颜伴杭州--花皙蔻牡丹盛世美颜精华油获选“2025杭州特色伴手礼”
  • 【Quest开发】快速添加可手指触摸按钮
  • unity VR linerenderer的线会被UI盖住
  • 微算法科技基于格密码的量子加密技术,融入LSQb算法的信息隐藏与传输过程中,实现抗量子攻击策略强化
  • 20250710-2-Kubernetes 集群部署、配置和验证-网络组件存在的意义?_笔记
  • 车载诊断进阶篇 --- 关于网关转发性能引起的思考
  • JAVA入门——安装java环境