MongoDB快速入门

目录

1.简介

2. 特点:

3.官网下载

4.启动

4.1命令参数方式启动服务

 4.2配置文件方式启动服务

5.shell命令连接

6.Linux命令安装

7.Docker安装

8.命令的基本使用

8.1数据库的操作

8.2数据库的删除

8.3集合操作

9.文档的插入和查询

10.文档更新

11.文档删除

12.文档分页查询

13.更复杂的查询

14.常用命令总结

15.索引Index

16.索引的操作

 16.索引的使用


1.简介

是一个开源、高性能、无模式的文档形数据库,mysql是关系型数据库。是那种最像关系型数据库的非关系型数据库。

数据格式非常松散,类似于JSON的格式BSON,他既可以存储比较复杂的数据类型,又比较灵活。

MonggoDB的记录十一文档,它是由一个字段值对(field:value)组成数据结构,类似于json队形

MongoDB快速入门_第1张图片

2. 特点:

高性能:支持持久性,索引支持更快长训

高可用:MongoDB的到工具被称为副本集,它可提供自动故障转移和数据冗余
高扩展:分片将数据分布在一组集群的机器上。(海量数据存储,服务能力水平扩展)

丰富的查询支持:B支持丰富的查询语言,支持读和写操作(CRUD),比如数据聚合、文本搜索和地理空间查询等。

3.官网下载

MongoDB Community Download | MongoDB  官网下载

https://fastdl.mongodb.org/windows/mongodb-windows-x86_64-5.0.9.zip 下载连接

MongoDB快速入门_第2张图片

命名规范:X.Y.Z的格式

y为奇数时表示当前版本为开发版,如:1.5.24.1.13

y 为偶数时表示当前版本为稳定版,如: 1.6.3 4.0.10;
z 是修正版本号,数字越大越好。
下载完成解压:
MongoDB快速入门_第3张图片

4.启动

4.1命令参数方式启动服务

默认端口27017

创建一个存放数据库的文件夹文件夹,在根目录创建了data>db文件夹

在bin目录下 启动命令:

MongoDB快速入门_第4张图片

 启动命令:ps这个--dbpath=后面的是你数据库要存的文件的地址

ps:后面不能有空格

mongod --dbpath=..\data\db

 初始化成功MongoDB快速入门_第5张图片

 4.2配置文件方式启动服务

先写一个配置类

在bin目录下写一个conf,在里面写一个个mongod.conf

MongoDB快速入门_第6张图片

storage:
	#The directory where the mongod instance stores its data.Default Value is "\data\db" on Windows.
    dbPath: E:\baidu\MongoDB\mongodb-windows-x86_64-4.4.15\mongodb-win32-x86_64-windows-4.4.15\data\db

ps:dbPath前面空4个空格,点tab会报错

启动命令

在bin目录下

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

5.shell命令连接

方案1:配置环境变量,就在path里面配置mongodb的bin目录

MongoDB快速入门_第7张图片

然后在命令行输入:mongo启动

MongoDB快速入门_第8张图片

 方案2:在bin目录下启动 输入mongo 

MongoDB快速入门_第9张图片

6.Linux命令安装

首先下载安装包,并导入linux里面

MongoDB快速入门_第10张图片

解压:

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

移动到自己的文件夹下

mv mongodb-linux-x86_64-4.0.10 /opt/module/

 此时就相当于windows里面默认配置

MongoDB快速入门_第11张图片

 再按照windows一样方法进行启动 创建data,log,config文件

修改配置文件

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: true
storage:
  #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: true
processManagement:
  #启用在后台运行mongos或mongod进程的守护进程模式。
  fork: true
net:
  #服务实例绑定的IP,默认是localhost,115.60.97.40服务器内网地址
  bindIp: localhost,115.60.97.40
  #bindIp
  #绑定的端口,默认是27017
  port: 27017

7.Docker安装

docker pull mongo:latest

docker run -d --restart=always -p 27017:27017 --name mymongo -v /data/db:/data/db -d mongo

docker exec -it mymongo /bin/bash
#启动
mongo

8.命令的基本使用

前置:mongodb的存储结构

MongoDB快速入门_第12张图片

8.1数据库的操作

use 数据库名称                 选择和创建数据与库,如果数据库不存在会直接创建,先创建是再内存中 

show dbs                           查看有权限查看的数据库内容

show databases                 和show dbs一样

ps:

1.再MongosDB中,集合只有再内容插入之后才会创建!,创建集合(数据表后要插入一个文档记录),集合才会出现

2.数据库创建满足一下条件:

1)不能是空字符串 2)不能含有空格,点,$,/,\,和(空字符)3)应该全部小写4)最多64个字节

db                  查看当前正在使用的数据库命令,如果没有选择数据库集合默认存放再test数据库中

可以查看use的数据库


保留数据库:

MongoDB快速入门_第13张图片

8.2数据库的删除

db.dropDatabase()                 用来删除已经持久化的数据库

8.3集合操作

显示创建

db.createCollection("集合名字")                创建集合
show collections                                查看创建的集合
db.集合.drop()                                  删除集合

隐示创建

具体在9,通俗说文档没有就直接创建

9.文档的插入和查询

插入

单插入

db.集合名称.insert(换成save也可以)(
{json数据}
)                                                      单个文档插入

多插入

db.集合名称.insertMany([
{json数据},
{json数据},
{json数据}
])                                                     多个文档插入
举例:
db.comment.insertMany([
{"_id":"1","articleid":"100001","content":"我们不应该把清晨浪费在手机上,健康很重要,一杯温水幸福你我 他。","userid":"1002","nickname":"相忘于江湖","createdatetime":new Date(),"likenum":NumberInt(1000),"state":"1"},
{"_id":"2","articleid":"100001","content":"我夏天空腹喝凉开水,冬天喝温开水","userid":"1005","nickname":"伊人憔 悴","createdatetime":new Date(),"likenum":NumberInt(888),"state":"1"},
{"_id":"3","articleid":"100001","content":"我一直喝凉开水,冬天夏天都喝。","userid":"1004","nickname":"杰克船 长","createdatetime":new Date(),"likenum":NumberInt(666),"state":"1"},
{"_id":"4","articleid":"100001","content":"专家说不能空腹吃饭,影响健康。","userid":"1003","nickname":"凯 撒","createdatetime":new Date(),"likenum":NumberInt(2000),"state":"1"},
{"_id":"5","articleid":"100001","content":"研究表明,刚烧开的水千万不能喝,因为烫 嘴。","userid":"1003","nickname":"凯撒","createdatetime":new Date(),"likenum":NumberInt(3000),"state":"1"}
]);

查询

db.集合名字.find() db.集合名字.find({}) 文档查询

db.comment.find({"列":"值"})                      查询对应属性

举例:

db.comment.find({"articleid":"100001"})

 条件查询

db.comment.find(
{"列":"值"}
,{_id:1,articleid:0}
)                        第一列标识查的符合条件行,第二行表示查询的列,0表示不显示,1表示显示

举例
db.comment.find({"articleid":"100001"},{_id:1,articleid:0})

删除

db.表.drop()                                删除集合

举例

db.comment.drop()

事务

MongoDB不支持事务,但是它可以使用json语法使用try--catch(){print(e)}在提示插入失败

举例:

try{
db.comment.insertMany([
{"_id":"1","articleid":"100001","content":"我们不应该把清晨浪费在手机上,健康很重要,一杯温水幸福你我 他。","userid":"1002","nickname":"相忘于江湖","createdatetime":new Date(),"likenum":NumberInt(1000),"state":"1"},
{"_id":"1","articleid":"100001","content":"我夏天空腹喝凉开水,冬天喝温开水","userid":"1005","nickname":"伊人憔 悴","createdatetime":new Date(),"likenum":NumberInt(888),"state":"1"},
{"_id":"3","articleid":"100001","content":"我一直喝凉开水,冬天夏天都喝。","userid":"1004","nickname":"杰克船 长","createdatetime":new Date(),"likenum":NumberInt(666),"state":"1"},
{"_id":"4","articleid":"100001","content":"专家说不能空腹吃饭,影响健康。","userid":"1003","nickname":"凯 撒","createdatetime":new Date(),"likenum":NumberInt(2000),"state":"1"},
{"_id":"5","articleid":"100001","content":"研究表明,刚烧开的水千万不能喝,因为烫 嘴。","userid":"1003","nickname":"凯撒","createdatetime":new Date(),"likenum":NumberInt(3000),"state":"1"}
]);
} catch (e) {
    print (e);
}

10.文档更新

db.集合.update(query,update,options)           以query条件查询,并修改成update里面的内容,options为可选的参数

MongoDB快速入门_第14张图片

覆盖修改   

db.comment.update({_id:"6"},{content:NumberInt("10002")})         把query一列全部修改成替换的  


局部修改

db.comment.updateOne({_id:"1"},{$set:{articleid:"102"}})     只修改某一列


批量修改

db.comment.update({userid:"1003"},{$set:{nickname:"凯撒大帝"}},{multi:true})   

对multi设置未true


列值增长修改

db.comment.update({_id:"3"},{$inc:{likenum:NumberInt(1)}})            $inc表示自增一

11.文档删除

db. 集合名称 .remove(条件)                 删除文档的语法结构
db.comment.remove({})                      数据全部删除
db.comment.remove({_id:"1"})                删除指定行

12.文档分页查询

db.集合.count(query, options)             query表示查询条件,options用于修改技术的额外选项   


db.comment.count()                                   查询多少条数据

db.comment.count({articleid:"100001"})        条件查询多少条数据


db.comment.find().limit(2)                                显示前2条数据

db.comment.find().limit(2) .skip(2)                    显示两条数据并跳过前两条数据


db.comment.find().sort()                                   默认以_id为升序

db.comment.find().sort({userid:1})                    以userid为升序 1表示升序 -1表示降序

13.更复杂的查询

模糊查询

db.collection.find({field:/正则表达式/})

db. 集合 .find({ 字段 :/ 正则表达式 /})                                  

比较查询

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

举例:查询评论点赞数量大于700的记录

db.comment.find({likenum:{$gt:NumberInt(700)}})


包含查询

db.comment.find({userid:{$in:["1003","1004"]}})              $in表示包含在1003和1004

条件连接

交集$and:[ { },{ },{ } ]                查看likenum字段大于等于700,小于2000

db.comment.find({$and:[{likenum:{$gte:NumberInt(700)}},{likenum:{$lt:NumberInt(2000)}}]})       


并集  ​$or:[ { },{ },{ } ] ​​​                  查看userid为1003并且  likenum字段小于1000的

db.comment.find({$or:[ {userid:"1003"} ,{likenum:{$lt:1000} }]})       

14.常用命令总结

选择切换数据库:use articledb

插入数据:db.comment.insert({bson数据})

查询所有数据:db.comment.find();

条件查询数据:db.comment.find({条件})

查询符合条件的第一条记录:db.comment.findOne({条件})

查询符合条件的前几条记录:db.comment.find({条件}).limit(条数)

查询符合条件的跳过的记录:db.comment.find({条件}).skip(条数)

修改数据:db.comment.update({条件},{修改后的数据}) db.comment.update({条件},{$set:{要修改部分的字段:数据})

修改数据并自增某字段值:db.comment.update({条件},{$inc:{自增的字段:步进值}})

删除数据:db.comment.remove({条件})

统计查询:db.comment.count({条件})

模糊查询:db.comment.find({字段名:/正则表达式/})

条件比较运算:db.comment.find({字段名:{$gt:}})

包含查询:db.comment.find({字段名:{$in:[1,值2]}})db.comment.find({字段名:{$nin:[1,值2]}})

条件连接查询:db.comment.find({$and:[{条件1},{条件2}]})db.comment.find({$or:[{条件1},{条件2}]})

15.索引Index

MongoDB 索引使用 B 树数据结构(确切的说是 B-Tree MySQL B+Tree
单字段索引
支持在文档的单个字段创建用户定义的升序/降序索引,称为单字索引,对单个字段索引和排序操作,索引键的排序顺序并不重要,因为MongoDB可以在认可方向遍历索引
复合索引
支持多个字段的用户定义索引,即复合索引
举例: 如果复合索引由 { userid: 1, score: - 1 } 组成,则索引首先按 userid 正序排序,然后
在每个 userid 的值内,再在按 score 倒序排序
其他索引
地理空间索引( Geospatial Index )、文本索引( Text Indexes )、哈希索引( Hashed Indexes )。
地理空间索引
为了支持对地理空间坐标数据的有效查询, MongoDB 提供了两种特殊的索引:返回结果时使用平面几何的二维索引和返回结果时使用球面
几何的二维球面索引。
文本索引
MongoDB 提供了一种文本索引类型,支持在集合中搜索字符串内容。这些文本索引不存储特定于语言的停止词(例如 “the” “a” “or” ),
而将集合中的词作为词干,只存储根词。
哈希索引
为了支持基于散列的分片, MongoDB 提供了散列索引类型,它对字段值的散列进行索引。这些索引在其范围内的值分布更加随机,但只支
持相等匹配,不支持基于范围的查询。

16.索引的操作

db.collection.getIndexes()                                         查看索引


db.collection.createIndex(keys, options)                    创建索引keys在那个字段上 option表示可选择,比如unique唯一性
举例:db.comment.createIndex({userid:1})                1表示升序,-1表示降序,里面字段如果多个则表示创建复合索引

db.collection.dropIndex(index)                                      索引的移除可以通过名称,或者指定规则删,如果不加index表示删除所有,其中_id是不允许删掉的

举例:db.comment.dropIndex({userid:1})        

MongoDB快速入门_第15张图片

 16.索引的使用

执行计划:来查看查询的情况,如果查询耗时的时间是否基于索引查询等

语法:db.collection.find(query,options).explain(options)

举例:

db.comment.find({userid:"1003"}).explain()

未加索引前:

MongoDB快速入门_第16张图片

  加索引后:

MongoDB快速入门_第17张图片

 涵盖查询:

当查询条件和查询的投影仅包含索引字段时, MongoDB 直接从索引返回结果,而不扫描任何文档或将文档带入内存。 这些覆盖的查询可以
非常有效。

     

你可能感兴趣的:(乱七八糟,mongodb)