首页 > 数据库 >NoSQL之MongoDB从入门到基础

NoSQL之MongoDB从入门到基础

时间:2022-10-29 12:35:45浏览次数:159  
标签:入门 NoSQL MongoDB 数据库 索引 id Cloud mongo


简介

Mongo 的BSON 数据格式非常适合文档化格式的存储及查询。
与传统的RMDB相比

SQL Terms/Concepts

MongoDB Terms/Concepts

database

database

table

connection

row

bson document

column

field

index

index

table join

Embedded document and linking

primary key

ObjectId

SQL

MongoDB

where/having

$match

group by

$group

select

$project

order by

$sort

limit

$limit

count()/sum()

$sum

安装

windows安装

下载zip包,exe双击安全即可。

Mac 安装

CRUD

自带命令

MongoDB3.4 版本自带以下14个命令行工具:

mongo vs mongod

mongod.exe和mongo.exe,前者为服务器,后者为操作后台。
mongo 客户端,用来连接MongoDB服务器;是一个交互式的js shell,提供一个强大的js 环境,为DBA管理MongoDB,developer查询MongoDB数据提供接口。通过mongo shell和MongoDB进行交互,查询,修改,管理,维护MongoDB的副本集和分片集群。参数​​​–nodb​​​阻止mongo在启动时连接到数据库实例;
mongod 是MongoDB系统的主要守护进程,用于处理数据请求,数据访问和执行后台管理操作,必须启动,才能访问MongoDB数据库。

mongoperf
mongos

mongodump & mongorestore

二进制数据,不能被直接读取;
mongodump,备份MongoDB数据。该命令可以导出所有数据到指定目录中。命令:​​​mongodump -h dbhost -d dbname -o dbdirectory -u user -p password​​​ mongorestore,恢复备份的数据。命令行:​​mongorestore -h <hostname><:port> -d dbname <path>​

mongoimport & mongoexport

用来做导入和导出数据库;命令:
​​​mongoexport -h host -p port -u username -p passwd​​​ -d database 要导出的库
-c collection 要导出的collection
-q 查询条件(用引号包起来)
-o 导出文件路径

mongostat & mongotop

mongostat是状态检测工具,间隔固定时间获取MongoDB的当前运行状态并输出。
mongotop,用来跟踪一个MongoDB实例,查看哪些读写数据花费大量时间。mongotop提供每个集合的水平的统计数据。命令:​​​mongotop n​​​,n不设置的话,默认为1;命令​​mongotop --locks​​报告每个数据库的锁的使用情况,输出信息如ns,db(名为 . 的数据库针对全局锁定,而非特定数据库),total,read,write。

其他

bsondump:将bson转换为json
mongooplog:用来做操作日志的回放;oplog是MongoDB复制集中用来记录操作记录的数据集合;
mongofiles:

客户端连接工具

shell

可视化工具

MongoDB Cloud Manager
官方推出的运维自动化管理系统,是企业版才支持的功能,社区用户也可以下载试用。Cloud Manager 主要功能包括:

  • MongoDB 集群(复制集、分片)的自动化部署
  • 集群监控、及报警定制
  • 自动数据备份与还原

MongoDB compass
官方推出的可视化管理工具,企业版才支持,compass 与 Cloud Manager 功能互补,Cloud Manager 偏向于部署、运维、监控,而 compass 则偏向于数据管理、查询优化等,其主要功能包括:

  • 数据分布可视化,自动分析各个字段取值的分布情况
  • 支持 CRUD 操作
  • 索引自动分析及优化建议
  • explain 的结果可视化

MongoDB Atlas
官方提供的 DBaaS 服务(Database as a Service),目前支持在 Amazon AWS 上构建 MongoDB 的云服务,未来有可能会支持更多的云厂商(Azure、Alibaba Cloud等)并通过Cloud Manager + compass 来提供可视化的数据管理。

MongoClient
一款开源、跨平台的 mongodb 管理工具,支持 MongoDB 3.2版本,具备数据库监控、gridfs管理、用户管理等功能。

Robomongo/robot 3T
开源,免费的MongoDB管理工具。现改名为robot 3T

MongoBooster
支持MongoDB 3.2 版本,个人使用免费,用于商业收费。

其他:
mongo-express
adminMongo
MongoVUE
​​​HumongouS.io​​​,在线版,支持移动端,有商业支持。
NoSQL Manager for MongoDB
MongoChef
Mongo Management Studio
至于哪个最好用,仁者见仁;一般而言,商业收费版会好用一些。我个人也并没有使用这里面所有的工具,给不出一个选择项。
​​​参考​

driver

本文只考虑java客户端连接工具。
mongo-java-driver
spring-data-mongodb

其他

JSON vs BSON

JSON的局限性,比如它只有null、布尔、数字、字符串、数组和对象这几种数据类型,没有日期类型,只有一种数字类型,无法区分浮点数和整数,也没法表示正则表达式或者函数。BSON是一种类JSON的二进制形式的存储格式,Binary JSON,支持内嵌的文档对象和数组对象,如Date和BinData类型,MongoDB使用BSON做为文档数据存储和网络传输格式。

ObjectId

每次插入一条数据系统都会自动插入一个_id键,键值不可以重复,它可以是任何类型的,也可以手动的插入,默认情况下它的数据类型是ObjectId,由于MongoDB在设计之初就是用作分布式数据库,所以使用ObjectId可以避免不同数据库中_id的重复(如果使用自增的方式在分布式系统中就会出现重复的_id的值)。
ObjectId使用12字节的存储空间,每个字节可以存储两个十六进制数字,所以一共可以存储24个十六进制数字组成的字符串,在这24个字符串中,前8位表示时间戳,接下来6位是一个机器码,接下来4位表示进程id,最后6位表示计数器。

索引种类:

_id索引、单键索引、多键索引、复合索引、过期索引TTL、全文索引、地理位置索引。

  • _id索引:绝大多数集合默认建立的索引;对于每个插入的数据,mongodb都会自动生成一条唯一的_id字段。
  • 单键索引:不自动创建,值单一,例如字符串,数字或者日期;
  • 多键索引:不自动创建,值有多个,如数组,与单键索引创建形式相同,区别在于字段的值;
  • 复合索引:查询条件不只一个时,需要建立复合索引;
  • 过期索引:是在一段时间后会过期的索引,索引过期后,相应的数据会删除(不仅仅是索引删除,还有数据);适用场景:在一段时间之后会时效的数据,比如用户的登陆信息、存储的日志;建立方法,db.test.ensureIndex({time:1},{expireAfterSeconds:10})秒数。其限制:存储在过期索引字段的值必须是指定的时间类型(ISODate或者其数据,不能使用时间戳,否则不能被自动删除);指定ISODate数组,则按照最小的时间进行删除;过期索引不能是复合索引;删除时间不精确(MongoDB默认60s执行一个删除过程,删除本身也需要时间)

客户端

Spring Data MongoDB

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

注解:
@Document:标注在实体类上
@CompoundIndexes:复合索引,加复合索引后通过复合索引字段查询将大大提高速度。
@Indexed:加索引。唯一索引​​​@Indexed(unique = true)​​​。也可以对数组进行索引,如果被索引的列是数组时,mongodb会索引这个数组中的每一个元素。
@Transient:不会被录入到数据库
@Id:MongoDB默认会为每个document生成一个 _id 属性,作为默认主键,且默认值为ObjectId,可以更改 _id 的值(可为空字符串),但每个document必须拥有 _id 属性。
@Field:代表一个字段,可以不加,不加的话默认以参数名为列名。

学习资源

​runoob-MongoDB​​​​MongoDB​


标签:入门,NoSQL,MongoDB,数据库,索引,id,Cloud,mongo
From: https://blog.51cto.com/u_15851118/5806023

相关文章

  • 《MyBatis从入门到精通》读书笔记
    第一章mybatis入门第二章mybatisxml基本使用第三章mybatis注解基本使用不推荐的使用方法。优点:对于需求简单的系统,效率较高;缺点:SQL变化时,需要重新编译代码。四个......
  • XAF新手入门 - 类型子系统(Types Info Subsystem)
    类型子系统概述类型子系统是XAF的核心概念,但我们平时却很少关注它,它集中存储了模块中的类型,它是生成应用程序模型(ApplicationModel)的基础,它与XAF中其它的概念都有所关......
  • 云小课|MRS基础原理之CarbonData入门
    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说)、深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云。更多精彩内容请单击......
  • 安装MongoDB及启动服务
    安装MongoDB----安装  ----配置环境变量:默认安装目录:C:\ProgramFiles\MongoDB\Server\3.6\bin 直接添加到path中即可。;号隔开。----在C盘根目录--创建一个文......
  • Kubernetes实战入门
    本篇文章将介绍如何在kubernetes集群中部署一个nginx服务,并且能够对其进行访问。一、NamespaceNamespace是kubernetes系统中的一种非常重要资源,它的主要作用是用来实现多......
  • UG NX 10.0快速入门及应用技巧
    《UGNX10.0快速入门及应用技巧》1.切换经典开发环境  文件->实用工具->用户默认设置->用户界面  或者在菜单栏中  文件->首选项->用户界面  布局:功......
  • TensorFlow.NET机器学习入门【0】前言与目录
    TensorFlow.NET机器学习入门【0】前言与目录    曾经学习过一段时间ML.NET的知识,ML.NET是微软提供的一套机器学习框架,相对于其他的一些机器学习框架,ML.NET侧重于......
  • angular入门篇8----Http模块的使用(2):使用接口
    angular入门篇8----Http模块的使用(2):使用接口1.创建Http服务1.1注册HttpClientModule模块我们需要在model.module.ts中注册HttpClientModule模块:\Store\src\app\mod......
  • MongoDB--常用语句
    1、插入单条数据db.students.insertOne({name:'Jane',age:21})2、插入多条数据db.students.insertMany([{name:'Kang',age:22},{name:'Mike',age:19}])3、删除单条数......
  • JavaScript--原型及模块入门
    面向对象回顾核心概念:万物皆对象(顶层对象Object)抽取行为作为方法抽取名词作为属性俩种构建对象的方式构造函数构建es6的形式classclassPerson{ constructor(){/......