0


一文入手MongoDB

MongoDB快速上手——从0到1入门

目录

MongoDB简介

MongoDB

是一个开源、高性能、无模式的文档型数据库(C++语言编写),特点是

高性能、易部署、易使用

,当初的设计就是用于简化开发和方便扩展,是

NoSQL

数据库产品中的一种。是最像关系型数据库(MySQL)的非关系型数据库。

应用场景:

  1. 数据量大
  2. 写入操作频繁(读写都很频繁)
  3. 价值较低的数据,对事务性要求不高

NoSQL与SQL区别和联系

  NoSQL(Not Only SQL ),意即“不仅仅是SQL” ,指的是非关系型的数据库,它们不保证关系数据的ACID特性 ,是一项全新的数据库革命性运动,NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。

  关系型数据库中的表都是存储一些结构化的数据,每条记录的字段的组成都一样,即使不是每条记录都需要所有的字段,但数据库会为每条数据分配所有的字段。而NoSQL数据库种类繁多,而且一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。无形之间也在架构的层面上带来了可扩展的能力。大数据量,高性能,NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单

NoSQL优点:

  • 高扩展性;
  • 高可用,高性能;
  • 灵活的数据类型;

NoSQL分类:

  • key-value键值存储数据库;
  • 列存储数据库
  • 文档型数据库
  • Graph图形数据库

常见的NoSQL数据库:

MongoDB、DynamoDB、SimpleDB、CouchDB、CouchBase、OrientDB、InfiniteGraph、Neo4j、FlockDB、Cassandra、以及HBase等。

MangoDB安装和配置

第一步:下载安装包

  MongoDB 提供了可用于 32 位和 64 位系统的预编译二进制包,你可以从MongoDB官网下载安装,MongoDB 预编译二进制包下载地址:
https://www.mongodb.com/download-center#community
在这里插入图片描述
根据上图所示下载 zip 包。

版本的选择:
MongoDB的版本命名规范如:x.y.z
y为奇数时表示当前版本为开发版,如:1.5.2、4.1.13;
y为偶数时表示当前版本为稳定版,如:1.6.3、4.0.10;
 z是修正版本号,数字越大越好。

详情:http://docs.mongodb.org/manual/release-notes/#release-version-numbers

第二步:解压安装启动

将压缩包解压到一个目录中。
在解压目录中,手动建立一个目录用于存放数据文件,如 data/db;

方式1:命令行参数方式启动服务
在 bin 目录中打开命令行提示符,输入如下命令:

mongod --dbpath=..\data\db

我们在启动信息中可以看到,mongoDB的默认端口是27017,如果我们想改变默认的启动端口,可以通过–port来指定端口。为了方便我们每次启动,可以将安装目录的bin目录设置到环境变量的path中, bin 目录下是一些常用命令,比如 mongod 启动服务用的,mongo 客户端连接服务用的。

方式2:配置文件方式启动服务
在解压目录中新建 config 文件夹,该文件夹中新建配置文件 mongod.conf ,内如参考如下:

storage: 
#The directory where the mongod instance stores its data.Default Value is "\data\db" on Windows. 
dbPath: D:\02_Server\DBServer\mongodb-win32-x86_64-2008plus-ssl-4.0.1\data

详情可参考:https://docs.mongodb.com/manual/reference/configuration-options/

启动方式:

mongod -f ../config/mongod.conf 
或
mongod --config ../config/mongod.conf

更多参数配置:

systemLog:destination: file 
    #The path of the log file to which mongod or mongos should send all diagnostic logging informationpath:"D:/02_Server/DBServer/mongodb-win32-x86_64-2008plus-ssl-4.0.1/log/mongod.log"logAppend:truestorage:journal:enabled:true#The directory where the mongod instance stores its data.Default Value is "/data/db". dbPath:"D:/02_Server/DBServer/mongodb-win32-x86_64-2008plus-ssl-4.0.1/data"net:#bindIp: 127.0.0.1 port:27017setParameter:enableLocalhostAuthBypass:false

Shell连接

在命令提示符输入以下shell命令即可完成登陆:

mongo 
或
mongo --host=127.0.0.1 --port=27017

Linux中的安装启动和连接

提示:和Windows下操作大同小异

步骤如下
(1)先到官网下载压缩包 mongod-linux-x86_64-4.0.10.tgz 。

可以用uname指令查看自己Linux操作系统位数

(2)上传压缩包到Linux中,解压到当前目录:

tar -xvf mongodb-linux-x86_64-4.0.10.tgz

(3)移动解压后的文件夹到指定的目录中:

mv mongodb-linux-x86_64-4.0.10 /usr/local/mongodb

(4)新建几个目录,分别用来存储数据和日志:

#数据存储目录 mkdir -p /mongodb/single/data/db
 #日志存储目录 mkdir -p /mongodb/single/log

(5)新建并修改配置文件

vi /mongodb/single/mongod.conf

配置文件的内容如下:

systemLog:#MongoDB发送所有日志输出的目标指定为文件 ##The path of the log file to which mongod or mongos should send all diagnostic logging information destination: file 
     #mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径         path:"/mongodb/single/log/mongod.log"#当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。 logAppend:truestorage:#mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。 ##The directory where the mongod instance stores its data.Default Value is "/data/db". dbPath:"/mongodb/single/data/db"journal:#启用或禁用持久性日志以确保数据文件保持有效和可恢复。 enabled:trueprocessManagement:#启用在后台运行mongos或mongod进程的守护进程模式。 fork:truenet:#服务实例绑定的IP,默认是localhost bindIp: localhost,192.168.0.2
        #bindIp #绑定的端口,默认是27017 port:27017

(6)启动MongoDB服务

/usr/local/mongodb/bin/mongod -f /mongodb/single/mongod.conf 
注意: 如果启动后不是 successfully ,则是启动失败了。原因基本上就是配置文件有问题。

通过进程来查看服务是否启动了:

ps -ef |grep mongod

(7)分别使用mongo命令和compass(图形化)工具来连接测试。

提示:如果远程连接,需要配置防火墙放行,或直接关闭linux防火墙
#查看防火墙状态 
systemctl status firewalld 
#临时关闭防火墙 
systemctl stop firewalld 
#开机禁止启动防火墙 
systemctl disable firewalld

(7)停止关闭服务

#客户端登录服务,注意,这里通过localhost登录,如果需要远程登录,必须先登录认证才行。 
mongo --port 27017#切换到admin库
 use admin 
 #关闭服务 
 db.shutdownServer()
【补充】 如果一旦是因为数据损坏,则需要进行如下操作:

1)删除lock文件:

rm -f /mongodb/single/data/db/*.lock

2)修复数据:

/usr/local/mongdb/bin/mongod --repair --dbpath=/mongodb/single/data/db

基本命令

查看当前可以使用的库:

show dbs 
或
show databases

演示:
在这里插入图片描述
创建数据库:

use 数据库名称

演示:
在这里插入图片描述

提示:此时虽然创建了该库,但是先存在内存中,未进行持久化操作,故此时是查询不到的

查看当前使用的库:

db

演示:
在这里插入图片描述
删除数据库:

db.dropDatabase()
提示:主要用来删除已经持久化的数据库

集合(Collection)CRUD操作

MongoDB中的集合,类似关系型数据库中的表。

 与Mysql中的术语联系与区别如下图所示:
在这里插入图片描述

增(Create)

显示创建:

db.createCollection(name)

集合的命名规范:

  • 集合名不能是空字符串""。
  • 集合名不能含有\0字符(空字符),这个字符表示集合名的结尾。
  • 集合名不能以"system."开头,这是为系统集合保留的前缀。
  • 用户创建的集合名字不能含有保留字符。有些驱动程序的确支持在集合名里面包含,这是因为某些系统生成的集合中包含该字符。除 非你要访问这种系统创建的集合,否则千万不要在名字里出现$。

演示:
在这里插入图片描述
隐式创建:
  当向一个集合中插入一个文档的时候,如果集合不存在,则会自动创建集合。

通常我们使用隐式创建文档即可

删(Delete)

集合删除语法格式如下:

db.collection.drop() 
或
db.集合.drop()

获取集合删除的返回值:
  如果成功删除选定集合,则 drop() 方法返回 true,否则返回 false。

db.mycollection.drop()

演示:
在这里插入图片描述

改(Update)

修改集合名:
db.旧集合名.renameCollection(new_name)
演示:在这里插入图片描述
更新Collection中的数据字段:

db.集合名.updateMany({},{$rename:{"旧字段名":”新字段名“}})
或
db.getCollection("集合名").update({},{\$rename:{"旧字段名":”新字段名“}},false,true)

查((Retrieve))

查看当前库中的集合:show tables命令

show collections 
或
show tables

文档(Document)CRUD操作

基本命令

文档(document)的数据结构和 JSON 基本一样。

所有存储在集合中的数据都是 BSON 格式。
在这里插入图片描述
单个文档的插入:
  使用insert() 或 save() 方法向集合中插入文档,语法如下:

db.collection.insert(<document or array of documents>,
  { writeConcern: <document>, 
  ordered: <boolean>})

参数:
在这里插入图片描述

提示:

1)comment集合如果不存在,则会隐式创建
2)mongo中的数字,默认情况下是double类型,如果要存整型,必须使用函数NumberInt(整型数字),否则取出来就有问题了。
3)插入当前日期使用 new Date() 4)插入的数据没有指定 _id ,会自动生成主键值
5)如果某字段没值,可以赋值为null,或不写该字段。
演示:
在这里插入图片描述

注意:
  1. 文档中的键/值对是有序的。
  2. 文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。 3. MongoDB区分类型和大小写。
  3. MongoDB的文档不能有重复的键。
  4. 文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。
文档键命名规范:
  • 键不能含有\0 (空字符)。这个字符用来表示键的结尾。
  • .和$有特别的意义,只有在特定环境下才能使用。
  • 以下划线"_"开头的键是保留的(不是严格要求的)。

批量查询:

db.collection.insertMany([<document 1> , <document 2>, ... ],
 { writeConcern: <document>, 
 ordered: <boolean>}

参数:
在这里插入图片描述
示例:
在这里插入图片描述

提示:
  • 插入时指定了 _id ,则主键就是该值。
  • 如果某条数据插入失败,将会终止插入,但已经插入成功的数据不会回滚掉。
  • 因为批量插入由于数据较多容易出现失败,因此,可以使用try catch进行异常捕捉处理,测试的时候可以不处理。

示例:
在这里插入图片描述

基本查询

统计查询
db.collection.count(query, options)

参数:
在这里插入图片描述
示例:
在这里插入图片描述

分页查询

  可以使用limit()方法来读取指定数量的数据,使用skip()方法来跳过指定数量的数据。

db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
  • 如果你想返回指定条数的记录,可以在find方法后调用limit来返回结果(TopN),默认值20
  • skip方法同样接受一个数字参数作为跳过的记录条数。(前N个不要),默认值是0

示例:
在这里插入图片描述

排序查询

sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用
于降序排列。

db.COLLECTION_NAME.find().sort({KEY:1})
 或
 db.集合名称.find().sort(排序方式)
提示: skip(), limilt(), sort()三个放在一起执行的时候,执行的顺序是先 sort(), 然后是 skip(),最后是显示的 limit(),和命令编写顺序无关。

示例:
在这里插入图片描述

正则复杂条件查询

  MongoDB的模糊查询是通过正则表达式的方式实现的。格式为:

db.collection.find({field:/正则表达式/}) 
或
db.集合.find({字段:/正则表达式/})
提示:正则表达式是js的语法,直接量的写法。

示例:
在这里插入图片描述

比较查询

  比较这个操作符也是很常用的,格式如下:

db.集合名称.find({"field":{$gt: value }}) // 大于: field > value
 db.集合名称.find({"field":{$lt: value }}) // 小于: field < value 
 db.集合名称.find({"field":{$gte: value }}) // 大于等于: field >= value 
 db.集合名称.find({"field":{$lte: value }}) // 小于等于: field <= value 
 db.集合名称.find({"field":{$ne: value }}) // 不等于: field != value

示例:
在这里插入图片描述

包含查询

包含使用$in操作符,不包含使用$nin操作符。

db.comment.find({字段名:{$in:["值","值"]}})

示例:

在这里插入图片描述

条件连接查询

我们如果需要查询同时满足两个以上条件,需要使用、

$逻辑操作符

($and、$or)操作符将条件进行关联。格式为:

$and:[{},{},{}]
或
$or:[{},{},{}]

示例:
在这里插入图片描述

索引

索引

支持在MongoDB中高效地执行查询。如果没有索引,MongoDB必须执行全集合扫描,即扫描集合中的每个文档,以选择与查询语句匹配的文档。这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的。

说明:MongoDB索引使用B树数据结构(确切的说是B-Tree,MySQL是B+Tree)

单字段索引

  MongoDB支持在文档的单个字段上创建用户定义的升序/降序索引,称为单字段索引(Single Field Index)。
  对于单个字段索引和排序操作,索引键的排序顺序(即升序或降序)并不重要,因为MongoDB可以在任何方向上遍历索引。

复合索引

  MongoDB还支持多个字段的用户定义索引,即复合索引(Compound Index)。
  复合索引中列出的字段顺序具有重要意义。例如,如果复合索引由 { userid: 1, score: -1 } 组成,则索引首先按userid正序排序,然后
在每个userid的值内,再在按score倒序排序。

其他索引

  地理空间索引(Geospatial Index)、文本索引(Text Indexes)、哈希索引(Hashed Indexes)等等。

tips:篇幅有限,索引相关的CRUD操作,以及MongoDB的集群、分片以及安全认证等,留给大家自己探索

结语

  上述过程,我们从0到1的从MongoDB的安装和配置,以及数据库、集合、文档的简单CRUD操作,让我们了解的MongoDB数据库的简单指令,简单的入门了MongoDB,可以实现基本的CRUD操作了,但是MongoDB还有很多操作,而且,现在分布式,微服务活跃的今天,MongoDB必将也会有一席之地,入手一下MongoDB,绝对不会后悔。

微语:不要活在虚妄的过去,不要为曾经做过太多假设,往事不回头,余生不讲究。

标签: mongodb 数据库 nosql

本文转载自: https://blog.csdn.net/qq_45967311/article/details/124536844
版权归原作者 一问30 所有, 如有侵权,请联系我们删除。

“一文入手MongoDB”的评论:

还没有评论