Linux数据库管理——day14——MongoDB数据库

mongodb数据库

mongodb和mysql的类比:
MongoDB MySQL
集合
文档
字段

    严格区分大小写,和mysql不同
    1. 初始安装:
       1.1 解压包,然后创建一个工作目录 
       1.2 在工作目录下创建一个 etc log data 和 data/db 这些目录
       1.3 把解压的mongodb的包中的bin目录拷贝到工作目录下
 
    2. 配置 : 在工作目录下的etc目录下创建一个配置文件mongodb.conf

dbpath=/工作目录/data/db/
logpath=/工作目录/log/mongodb.log
logappend=true
fork=true
bind_ip=本机的IP地址    # 不写该行默认为127.0.0.1
port=端口号码            # 不写默认为27017

    3. 给启动服务和停止服务设置别名(方便操作,可以不进文档)

echo "alias mongodb='/工作目录/bin/mongod -f /usr/local/mongodb/etc/mongodb.conf'" >> /etc/bashrc 
echo "alias startmongo='/工作目录/bin/mongo --host 本机的IP地址 --port 端口号码'" >> /etc/bashrc 
source /etc/bashrc

    4. 启动服务

/工作目录/bin/mongod -f /usr/local/mongodb/etc/mongdb.conf
# 如果设置了别名,那简单了 命令输入: mongodb 即可

    5. 停止服务

/工作目录/bin/mongod --shutdown -f /usr/local/mongodb/etc/mongdb.conf 
# 如果设置了别名,那简单了 命令输入: mongodb --shutdown 即可

    6. 进入数据库 (根据启动的时候配置的IP和端口启动,如果配置中没写,这里也可以不写host和port两个选项参数)

/工作目录/bin/mongo --host 本机的IP地址 --port 端口号码
# 如果设置了别名,那简单了 命令输入:startmongo 即可

    *. 如果觉得老是写工作目录麻烦,就修改PATH的值

echo 'export PATH=$PATH:/工作目录/bin' >> /etc/profile
source /etc/profile
数据库命令
查看所有库 show dbs
查看当前库名 db
切换到某个库 use 库名
如果该库不存在,在一段时间后创建该库,或者下一个对该库进行修改的操作的时候
查看库下所有集合 show tables
删除当前所在库 db.dropDatabase()
创建集合新一个文档的数据(如果集合不存在会自动创建) db.集合名.save({字段名1:值1,字段名2:值2})
删除集合 db.集合名.drop()
查看集合中所有文档信息 db.集合名.find()
一次显示20个文档,如果要继续查看就立刻使用命令 it
最后全部输入完,还在用it命令会报错"no cursor"
查看集合中所有符合条件文档信息 db.集合名.find({条件})
查看集群中的一个文档信息 db.集合.findOne()
删除指定文档的内容 db.集合.remove({条件})
db.集合.remove({})    代表删除集合中所有内容,但是集合依然存在
存储类型  
字符string 用""引起来的都是当作string类型,不管里面字符也没有具体含义,只要引起来就是字符
布尔hool 只有两个值true false
空null 值有一个值null,代表字段存储量一个空值
数值 默认是double类型的64位浮点的计数类型
NumberInt(数字),让里面的数字进行去尾操作成为一个整数,也就是 NumberInt(3.999)=3
NumberLong(数字),这里面在那写整数,出来的也是整数,如果里面写一个小数,那么就报错
数组array 格式:{字段:[1,2,3,4,"a","b"]}
让一个字段存储多个值
代码 格式:{字段:function(){/* 代码内容 */}}
存储代码内容
日期 格式:{字段:new Date()}
存储当前日期信息,不包含时区
对象 格式:{字段:ObjectId()}
在该字段存储一个文档唯一标识,一般默认自动创建的id即使存储这个类型的值
内嵌 格式:{字段:{内嵌字段1:"值1",内嵌字段2:"值2",内嵌字段3:"值3"}}
在该字段中存储多个字段信息,而这么多字段都当作一个值存在主字段中
正则表达式 格式:{字段:/正则/}
使用正则做一个限定条件

注意:
   1. 当在集合中存储字段的时候,前后字段相同,后者字段的数据会覆盖前者,不过这属于操作失误,尽量避免

> db.example.save({字段1:ObjectId()})
WriteResult({ "nInserted" : 1 })
> db.example.save({字段2:ObjectId(),字段2:new Date()})
WriteResult({ "nInserted" : 1 })
> db.example.save({字段3:ObjectId(),字段3:new Date(),字段3:ObjectId()})
WriteResult({ "nInserted" : 1 })
> db.example.find()
{ "_id" : ObjectId("5bdbf0fe169e7f1d4a497ec4"), "字段1" : ObjectId("5bdbf0fe169e7f1d4a497ec3") }
{ "_id" : ObjectId("5bdbf112169e7f1d4a497ec6"), "字段2" : ISODate("2018-11-02T06:39:14.051Z") }
{ "_id" : ObjectId("5bdbf129169e7f1d4a497ec9"), "字段3" : ObjectId("5bdbf129169e7f1d4a497ec8") }

    2. 所有存储后,都会自动创建一个_id的字段,并且赋予对象类型值,用于唯一标示文档,可以理解为主键,所以尽量字段不要取这个名字,也不要修改这个字段的值,如果修改后文档和其他文档的_id值相同,那么就会报错


数据库导入导出
    数据库导出 CSV格式

/工作目录/bin/mongoexport --host 数据库IP --port 端口号 -d 库名 -c 集合名 -f 字段名1,字段名2,字段名3 --type=csv > /存储目录(需要提前创建号)/存储文件名.csv

# csv存储文件格式:

字段名1,字段名2,字段名3
值11,值12,
值21,,值23

# 如果原来存储的集合中没有某个具体的字段的值,那么就会以空代替,每隔值之间用,(逗号)隔开
# 第一行写的字段数据中有n个字段,就有n-1个逗号,那么下面所有的值中都有多少个逗号

     数据恢复 CSV格式(一般采用最后两个命令进行导入操作)

# 根据指定的字段,把所有的数据依次导入,不过这样CSV中所有的数据都会导入数据库,包括第一行的字段指定
/工作目录/bin/mongoimport --host 数据库IP --port 端口号 -d 库名 -c 集合名 -f 字段名1,字段名2,字段名3 --type=csv  /存储目录/存储文件名.csv

# 根据CSV的第一行中指定的字段进行追加导入
/工作目录/bin/mongoimport --host 数据库IP --port 端口号 -d 库名 -c 集合名 --headerline --type=csv  /存储目录/存储文件名.csv

# 先删除指定库的集合中的所有数据,然后进行导入
/工作目录/bin/mongoimport --host 数据库IP --port 端口号 -d 库名 -c 集合名 --headerline --drop --type=csv  /存储目录/存储文件名.csv

    数据库导出 JSON格式

/工作目录/bin/mongoexport --host 数据库IP --port 端口号 -d 库名 -c 集合名 --type=json > /存储目录(需要提前创建号)/存储文件名.json

     数据恢复 JSON格式(一般采用最后两个命令进行导入操作)

# 保留原集合中的内容,如果想删除原集合中的内容,用参数 --drop 即可
/工作目录/bin/mongoimport --host 数据库IP --port 端口号 -d 库名 -c 集合名 --type=json  /存储目录/存储文件名.json

    区别:
     CSV文件只存储了指定字段的值,所以必须指定字段,相对导出速度快且体积小
     JSON文件是把我们用db.集合.find()查看到的所有信息全部存储下来,存储比较全面


数据备份
    使用命令进行备份

/工作目录/bin/mongodump  --host 数据库IP --port 端口 -d 库名 -c 集合名 -o /存储的目录

命令详解:

--host、--port 指定数据的IP和端口
不写默认为127.0.0.1和27017
-d 指定备份的库名,并且在指定的存储目录下创建一个和库同名的目录存储备份信息
不写默认是所有库,并且在指定存储目录下创建一个dump目录
-c 指定备份的集合名
不写默认为所有集合
-o 指定存储备份文件的目录
不写默认是当前目录

数据恢复
    使用命令进行恢复

/工作目录/bin/mongorestore --host 数据库IP --port 端口 -d 库名 -c 集合名 /存储的目录/备份文件

命令详解:

--host、--port 指定数据的IP和端口
不写默认为127.0.0.1和27017
-d 指定将数据恢复到哪个库中
不写默认根据备份的时候的库名进行恢复
-c 指定备份的集合名
不写默认为所有集合

猜你喜欢

转载自blog.csdn.net/Yu1543376365/article/details/83662259