MongoDB的基本内容和应用场景介绍

MongoDB的基本内容和应用场景介绍

MongoDB 设计初衷——关系型数据库难以为继

​ MongoDB 始于 2007 年,由 Dwight Merriman、Eliot Horowitz 和 Kevin Ryan(曾是 DoubleClick 的主理团队)共同创立。DoubleClick 是一家互联网广告公司(现隶属于 Google),该公司每秒提供 40 万个广告,但在可伸缩性和敏捷性方面经常遇到困难,团队不得不经常使用许多自定义数据存储来解决现有关系型数据库的不足。因此,他们决定开发一款新的数据库产品,以解决在 DoubleClick 时遇到的问题。

​ 2009 年,经过将近 2 年的开发,10gen(最初的开发公司)开发出了 MongoDB 的雏形并将其开源以及正式命名为 MongoDB,同时成立开源社区,通过社区运营 MongoDB。MongoDB 的命名源于英文单词 “humongous”,意为 “巨大的”,这也体现了其设计之初的目标是能够处理大规模的数据。


MongoDB 支持的数据类型

基本数据类型

字符串(String):用于存储文本信息,如姓名、地址等。

整数(Integer):32 位或 64 位整数,可用于表示数量,如年龄、数量等。

浮点数(Double):用于表示带有小数部分的数值,如价格等。

布尔值(Boolean):表示真(true)或假(false),可用于表示状态,如是否激活等。

日期(Date):用于存储日期和时间信息。

复合数据类型

数组(Array):可以存储多个值,这些值可以是相同或不同的数据类型。

对象(Object):即嵌套文档,用于表示更复杂的结构关系。

ObjectId:是 MongoDB 中每个文档默认的唯一标识符,由 12 个字节组成,包含时间戳、机器标识符、进程标识符和随机数等信息。


MongoDB 的组成单元

文档(Document)

文档是 MongoDB 中的基本数据单元,类似于关系型数据库中的行。它是一个键-值对(key-value)的集合,采用类似 JSON(JavaScript Object Notation)的格式,不过在 MongoDB 中称为 BSON(Binary JSON)。例如:

   {"name": "John Doe","age": 30,"address": {"street": "123 Main St","city": "Anytown","zip": "12345"},"hobbies": ["reading", "swimming"]}

集合(Collection)

集合是一组文档的容器,类似于关系型数据库中的表。集合没有固定的模式(schema - free),这意味着一个集合中的文档可以有不同的结构。例如,一个名为 “customers” 的集合可以包含以下不同结构的文档:

   // 文档1{"customer_id": 1,"name": "Alice","phone": "123 - 456 - 7890"}// 文档2{"customer_id": 2,"company": "ABC Corp","contacts": [{"name": "Bob","email": "bob@abc.com"},{"name": "Carol","email": "carol@abc.com"}]}

数据库(Database)

​ 数据库是集合的容器,一个 MongoDB 实例可以包含多个数据库。每个数据库可以有自己独立的权限设置、存储配额等管理功能。例如,可以有一个名为 “ecommerce” 的数据库,其中包含 “customers”、“products”、“orders” 等集合。

​ 数据库名称不能是空字符串,且不能包含以下字符:/. " * < > : |? $。数据库名称最多为 64 个字节。


MongoDB 的常见应用场景

  1. 社交场景

    ​ 适合存储用户信息,比如用户的基本资料、账号信息、个人偏好等。用户的各种动态信息,如朋友圈、微博等也可以方便地以文档形式存储。

    ​ 通过地理位置索引可以实现附近的人、定位等功能,方便社交应用中的位置相关服务,例如基于位置的社交推荐、附近的活动推荐等。

    示例代码如下:

    # 连接到 MongoDB
    client = MongoClient('localhost', 27017)
    db = client['social_app_db']
    users_collection = db['users']
    posts_collection = db['posts']# 用户信息数据结构
    user_info = {'username': 'johndoe','email': 'johndoe@example.com','personal_preferences': {'interests': ['music', 'sports']}
    }# 动态信息数据结构
    post = {'user_id': user_info['_id'],'content': 'Having a great day!','likes': 0
    }# 查询附近的人(假设已经有地理位置信息存储在用户文档中)
    nearby_users_query = {'location': {'$near': {'$geometry': {'type': 'Point','coordinates': [longitude, latitude]},'$maxDistance': radius_in_meters}}
    }
    
  2. 内容管理场景

    ​ 适合存储文章、新闻、博客等文本内容,以及评论、标签等相关信息。可以支持全文搜索功能,方便用户快速查找感兴趣的内容;支持分类和排序功能,便于内容的管理和展示。

    示例代码如下:

    # 连接到 MongoDB
    client = MongoClient('localhost', 27017)
    db = client['content_management_db']
    articles_collection = db['articles']# 文章信息数据结构
    article = {'title': 'Interesting News','content': 'This is an interesting article...','tags': ['news', 'current affairs'],'comments': [{'user': 'user1', 'text': 'Great article!'},{'user': 'user2', 'text': 'Agreed!'}]
    }# 全文搜索查询
    query = 'interesting'
    full_text_search_query = {'$text': {'$search': query}}# 分类和排序查询
    category = 'news'
    sorted_results_query = {'tags': category}.sort('created_date', -1)
    
  3. 游戏场景

    ​ 可以存储游戏用户信息,如玩家的账号、等级、经验、装备、积分等。这些信息可以直接以内嵌文档的形式存储,方便查询和更新,能够快速响应用户在游戏中的各种操作。

    示例代码如下:

    # 连接到 MongoDB
    client = MongoClient('localhost', 27017)
    db = client['game_db']
    players_collection = db['players']# 游戏用户信息数据结构
    player_info = {'player_id': 123,'username': 'gamer1','level': 10,'experience': 5000,'equipment': ['sword', 'shield'],'points': 1000
    }
    
  4. 物流场景

    ​ 存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB 内嵌数组的形式来存储,可以一次查询就能将订单所有的变更读取出来,方便物流企业对订单的跟踪和管理。
    ​ 示例代码如下:

    # 连接到 MongoDB
    client = MongoClient('localhost', 27017)
    db = client['logistics_db']
    orders_collection = db['orders']# 订单信息数据结构
    order = {'order_id': 456,'status_history': [{'status': 'placed', 'timestamp': '2024-10-13T10:00:00Z'},{'status': 'shipped', 'timestamp': '2024-10-14T12:00:00Z'}]
    }
    

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序上传组件封装uploadHelper2.0使用整理

一、uploadHelper2.0使用步骤说明 uploadHelper.js ---上传代码封装库 cos-wx-sdk-v5.min.js---腾讯云&#xff0c;对象存储封装库 第一步&#xff0c;下载组件代码&#xff0c;放置到自己的小程序项目中 第二步、 创建上传对象&#xff0c;执行选择图片/视频 var _this th…

【H2O2|全栈】关于CSS(14)如何完成常规的页面布局

目录 基本布局方式 前言 准备工作 管理系统界面 APP界面 区域内的滚动条 结束语 基本布局方式 前言 通过上一次学习如何让页面适应任意屏幕的学习&#xff0c;我们就可以开始学习如何用代码“画”出基本的框架了。本期主要分享如何绘制基本的PC端管理系统和移动端APP的…

新颖的 setTimeout() 替代方案

在前端开发中&#xff0c;长时间运行的JavaScript任务一直是一个棘手的问题。它们会导致页面无响应&#xff0c;影响用户体验。传统上&#xff0c;开发者使用setTimeout()来分割长任务&#xff0c;但这种方法存在明显的缺陷。最近&#xff0c;Chrome 129引入了一种新的、更高效…

机器学习面试笔试知识点-线性回归、逻辑回归(Logistics Regression)和支持向量机(SVM)

机器学习面试笔试知识点-线性回归、逻辑回归Logistics Regression和支持向量机SVM 一、线性回归1.线性回归的假设函数2.线性回归的损失函数(Loss Function)两者区别3.简述岭回归与Lasso回归以及使用场景4.什么场景下用L1、L2正则化5.什么是ElasticNet回归6.ElasticNet回归的使…

视频云存储/音视频流媒体视频平台EasyCVR视频汇聚平台在欧拉系统中启动失败是什么原因?

视频监控/视频集中存储/磁盘阵列EasyCVR视频汇聚平台具备强大的拓展性和灵活性&#xff0c;支持多种视频流的外部分发&#xff0c;如RTMP、RTSP、HTTP-FLV、WebSocket-FLV、HLS、WebRTC、fmp4等&#xff0c;这为其在各种复杂环境下的部署提供了便利。 安防监控EasyCVR视频汇聚平…

分布式数据库安全可靠测评名录之平凯数据库(TiDB企业版)

作者&#xff1a; 数据源的TiDB学习之路 原文来源&#xff1a; https://tidb.net/blog/d052ee0b 2024 年 9 月 30 日&#xff0c;中国信息安全测评中心公布安全可靠测评结果公告&#xff08;2024年第2号&#xff09;&#xff0c;其中包含 6 款集中式数据库和 11 款分布式数据…

鸿蒙网络编程系列30-断点续传下载文件示例

1. 断点续传简介 在文件的下载中&#xff0c;特别是大文件的下载中&#xff0c;可能会出现各种原因导致的下载暂停情况&#xff0c;如果不做特殊处理&#xff0c;下次还需要从头开始下载&#xff0c;既浪费了时间&#xff0c;又浪费了流量。不过&#xff0c;HTTP协议通过Range…

信息安全工程师(58)网络安全漏洞处置技术与应用

前言 网络安全漏洞处置技术与应用是一个复杂而关键的领域&#xff0c;它涉及漏洞的发现、评估、修补以及后续的监控与防范等多个环节。 一、网络安全漏洞发现技术 网络安全漏洞发现技术是漏洞处置的首要步骤&#xff0c;它旨在通过各种手段识别出网络系统中存在的潜在漏洞。这些…

jupyter notebook远程连接服务器

jupyter notebook远程连接服务器 文章目录 jupyter notebook远程连接服务器jupyter是什么配置步骤安装jupyter生成jupyter配置文件编辑jupyter配置文件设置密码ssh隧道 启动顺序jupyter添加kernel下载ipykernel包添加kernel 测试遇到的问题 jupyter是什么 Jupyter Notebook是一…

数据结构之队列(python)

华子目录 1.队列存储结构1.1队列基本介绍1.2队列的实现方式 2.顺序队列2.1顺序队列的介绍2.2顺序队列的简单实现2.3代码实现 3.链式队列和基本操作3.1链式队列数据入队3.2链式队列数据出队3.3队列的链式表示和实现 1.队列存储结构 1.1队列基本介绍 队列的两端都"开口&qu…

FFmpeg 4.3 音视频-多路H265监控录放C++开发三 :安装QT5.14.2, 并将QT集成 到 VS2019中。

一&#xff0c;安装QT&#xff0c; 重点&#xff1a;在安装QT的时候要安装msvc201x版本的组件&#xff0c; 二 &#xff0c; 安装 qt-vs-tools Index of /development_releases/vsaddin/2.8.1 三&#xff0c;需要安装过 windows10 SDK&#xff0c;一般我们在安装vs2019的时候就…

餐饮店怎么标注地图位置信息?

随着市场竞争的日益激烈&#xff0c;商家若想在竞争中脱颖而出&#xff0c;就必须想方设法去提高自身的曝光度和知名度&#xff0c;为店铺带来更多的客流量。其中&#xff0c;地图标注便是一种简单却极为有效的方法。通过在地图平台上添加店铺位置信息&#xff0c;不仅可以方便…

电子级异丙醇溶液除硼树脂

电子级异丙醇溶液的净化除杂是一个精细的过程&#xff0c;旨在去除溶液中的杂质&#xff0c;以满足电子行业对高纯度化学品的严格要求。以下是电子级异丙醇溶液净化除杂的相关信息&#xff1a; 净化除杂方法 ● 精馏工序&#xff1a;通过精馏塔进行初步分离&#xff0c;去除大部…

(44)MATLAB读取语音信号进行频谱分析

文章目录 前言一、MATLAB代码二、仿真结果画图三、频谱分析 前言 语音信号是我们最常见的一种信号&#xff0c;本文使用MATLAB读取一段语音信号画出其波形&#xff0c;然后使用FFT变换给出其频谱&#xff0c;对其频谱进行分析。 一、MATLAB代码 读取语音数据并得出频谱的代码…

JMeter如何设置HTTP代理服务器?

1、 2、添加线程组 3、设置HTTP代理服务器&#xff0c;目标控制器选择“测试计划>线程组” 过滤掉不需要的信息 4、设置电脑手动代理 5、点击启动&#xff0c;在浏览器操作就可以了

Halcon实战——基于NCC模板匹配的芯片检测(附源码)

Halcon实战——基于NCC模板匹配的芯片检测&#xff08;附源码&#xff09; 关于作者 作者&#xff1a;小白熊 作者简介&#xff1a;精通python、matlab、c#语言&#xff0c;擅长机器学习&#xff0c;深度学习&#xff0c;机器视觉&#xff0c;目标检测&#xff0c;图像分类&am…

OpenCV高级图形用户界面(10)创建一个新的窗口函数namedWindow()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 创建一个窗口。 函数 namedWindow 创建一个可以作为图像和跟踪条占位符的窗口。创建的窗口通过它们的名字来引用。 如果已经存在同名的窗口&am…

应用层协议 序列化

自定义应用层协议 例子&#xff1a;网络版本计算器 序列化反序列化 序列化&#xff1a;将消息&#xff0c;昵称&#xff0c;日期整合成消息-昵称-日期 反序列化&#xff1a;消息-昵称-日期->消息&#xff0c;昵称&#xff0c;日期 在序列化中&#xff0c;定义一个结构体…

第8篇:网络安全基础

目录 引言 8.1 网络安全的基本概念 8.2 网络威胁与攻击类型 8.3 密码学的基本思想与加密算法 8.4 消息认证与数字签名 8.5 网络安全技术与协议 8.6 总结 第8篇&#xff1a;网络安全基础 引言 在现代信息社会中&#xff0c;计算机网络无处不在&#xff0c;从互联网到局…

C语言_指针_进阶

引言&#xff1a;在前面的c语言_指针初阶上&#xff0c;我们了解了简单的指针类型以及使用&#xff0c;下面我们将进入更深层次的指针学习&#xff0c;对指针的理解会有一个极大的提升。从此以后&#xff0c;指针将不再是难点&#xff0c;而是学习底层语言的一把利器。 本章重点…