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

深入浅出MongoDB(一)

深入浅出MongoDB(一)

文章目录

    • 深入浅出MongoDB(一)
      • MongoDB简介
      • MongoDB主要特点
      • MongoDB适用及不适用场景
      • 概念解析
      • 数据类型
      • MongoDB连接
      • 创建数据库
      • 删除数据库

MongoDB简介

​ MongoDB是一个高性能、可扩展、易部署的分布式文档数据库系统。MongoDB由C++语言编写,为web应用提供高性能的数据存储解决方案。它采用分布式文件存储的方式,支持高负载情况下添加更多节点以保证服务器性能。MongoDB的数据模型基于文档和集合的概念。使用BSON作为数据结构,能够以面向对象的方式存储数据,非常适合存储复杂的数据结构比如日志记录、用户信息等。

MongoDB主要特点

  1. 面向集合存储:把数据分组到多个集合中,每个集合可以包含无限个文档,类似于关系型数据库中的表,但是不需要进行模式定义。
  2. 模式自由:集合中没有行和列概念,每个文档可以有不同的键,键的值不要求一致的数据类型。
  3. 动态查询:支持丰富的查询表达式,查询指令使用JSON形式的表达式。
  4. 高效的数据存储:支持二进制数据以及大型对象(比如图片和视频)。
  5. 复制和故障恢复:支持数据的复制和故障恢复机制。
  6. 自动分片:支持自动分片以支持云级别的伸缩性,可以动态添加额外的服务器。

MongoDB适用及不适用场景

  1. MongoDB适用于网站数据,缓存,大尺寸低价值的数据,高伸缩性场景,用于对象以及JSON数据的存储。
  2. MongoDB不适用于高度事务性的系统,传统的商业智能应用,复杂的跨文档级联查询。

概念解析

SQL概念MongoDB概念解释
databasedatabase数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield数据字段/域
indexindex索引
table joins表连接,MongoDB不支持
primary keyprimary key主键,MongoDB自动将_id字段设置为主键
  1. 数据库:一个mongodb可以建立多个数据库,默认数据库是db,存储在data目录中。单实例可以容纳多个独立的数据库,每个都有自己的集合和权限,不同的数据库也放置在不同的文件中。数据库通过名字来标识,需要小写,不能含有''、空格、.、$、/、\、和\0,不能是空字符串。admin从权限角度来看是root数据库,把一个用户添加到数据库,这个用户自动继承所有数据库的权限。local这个数据永远不会被复制,可以用来存储限于本地单击的任意集合。当mongodb用于分片设置时,config数据库在内部使用保存分片的相关信息。
# 显示所有数据的列表
show dbs
# 显示当前数据库对象或集合
db
# 连接到一个指定的数据库
use local
  1. 文档:一个键值对,文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型。文档中的键值对是有序的,区分类型和大小写,不能有重复的键,键是字符串。文档键不能有空字符,.和$只能在特定环境下使用,以下划线_开头的键是保留的。

  2. 集合:集合是mongodb的文档组,存在于数据库中,没有固定的结构,可以插入不同格式和类型的数据,但是通常情况下插入集合的数据具有一定的关联性。集合名不能是空字符串,也不能含有空字符,不能以系统集合保留的前缀"system."开头,集合名不能含有保留字符。

  3. capped集合:固定大小的集合,有很高的性能以及队列过期的特性,自动维护对象的插入顺序,适合用来记录日志。我们需要显式的创建一个capped集合,指定集合大小,单位是字节,集合的数据存储空间值是提前分配的。mongodb的操作日志文件oplog.rs是利用capped集合实现的。

# 在capped集合中可以添加对象、更新,然而对象不会增加存储空间,不允许进行删除、可以使用drop方法删除所有的行,删除后需要重新创建集合
db.createCollection("mycoll", {capped:true, size:100000})
  1. 元数据:数据库的信息是存储在集合中的,它们使用了系统的命名空间dbname.system.*
集合命名空间描述
dbname.system.namespaces列出所有名字空间。
dbname.system.indexes列出所有索引。
dbname.system.profile包含数据库概要(profile)信息。
dbname.system.users列出所有可访问数据库的用户。
dbname.local.sources包含复制对端(slave)的服务器信息和状态。

数据类型

数据类型描述
String字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。
Integer整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。
Boolean布尔值。用于存储布尔值(真/假)。
Double双精度浮点值。用于存储浮点值。
Min/Max keys把一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。
Arrays用于将数组或列表或多个值存储为一个键。
Timestamp时间戳。记录文档修改或添加的具体时间。
Object用于内嵌文档。
Null用于创建空值。
Symbol符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。
Date日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。
Object ID对象 ID。用于创建文档的 ID。
Binary Data二进制数据。用于存储二进制数据。
Code代码类型。用于在文档中存储 JavaScript 代码。
Regular expression正则表达式类型。用于存储正则表达式。

MongoDB连接

  1. 在mongodb安装目录的bin目录下执行mongod可以启动mongodb服务。
  2. 通过shell连接mongodb服务
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
  • 使用默认端口连接服务
mongodb://localhost
  • 使用用户名和密码连接
mongodb://admin:123456@localhost/
  • 使用用户名和密码连接到指定数据库
mongodb://admin:123456@localhost/test
  • replica pair和replica set是mongdb的一种复制机制。连接两个replica pair的服务器,一个作为备份数据库,需要另一个复制机制实现读写分离方案和节点数据同步。连接三台replica set的服务器,写入操作应用在主服务器并且分布查询到从服务器。
# replica pair
mongodb://xx.cn:27017,xx.com:27017
# replica set
mongodb://host1,host2,host3/?slaveOk=true
# 直接连接到第一个服务器
mongodb://host1,host2,host3/?connect=direct;slaveOk=true
  • 安全模式连接replica set,等待至少两个复制服务器写入成功
mongodb://localhost/?safe=true;w=2;wtimeoutMS=2000

创建数据库

  1. use db_name,如果数据库不存在则创建数据库,否则切换到指定数据库。
  2. 示例use tax_engine

删除数据库

  1. db.dropDatabase()删除当前数据库,默认为test,可以使用db命令查看当前数据库名。
  2. db.collection.drop()删除集合。

http://www.kler.cn/a/321354.html

相关文章:

  • Mybatis配置文件的增删改查功能
  • 深度解析:Android APP集成与拉起微信小程序开发全攻略
  • 「QT」窗口类 之 QWidget 窗口基类
  • 批量从Excel某一列中找到符合要求的值并提取其对应数据
  • 修改数据库和表的字符集
  • 探索 HTML 和 CSS 实现的蜡烛火焰
  • 嵌入式C语言自我修养:GNU C编译器扩展语法精讲
  • 利用Puppeteer-Har记录与分析网页抓取中的性能数据
  • TikTok的网络环境搭建指南
  • C++实现二叉树的创建删除,dfslfs,求叶子结点个数,求叶子结点个数,求树的高度
  • D19【python接口自动化学习】-python基础之内置数据类型
  • 矿石运输船数据集、散货船数据集、普通货船数据集、集装箱船数据集、渔船数据集以及客船数据集
  • Web3Auth 如何工作?
  • 相机、镜头参数详解以及相关计算公式
  • 【OceanBase 诊断调优】—— GC问题根因分析
  • centos7 启动mongodb时报错ERROR: child process failed, exited with error number 1
  • electron使用npm install出现下载失败的问题
  • 【HTML】img标签和超链接标签
  • Apache Iceberg 概述
  • ansible playbook多个play多个task
  • ChatGPT高级语音助手正式上线!OpenAI:50多种语言、9种声线可选
  • 磨具生产制造9人共用一台工作站
  • elasticsearch的Ingest Attachment插件的使用总结
  • 数据结构之链表(1),单链表
  • 微服务MongoDB解析部署使用全流程
  • C嘎嘎入门篇:类和对象(1)