首页 > 技术文章 > MongoDB1 mongodb介绍, 启动和配置, 账号管理, 数据库操作curd操作, 集合操作, 导出导入数据库

ludingchao 2020-12-15 11:14 原文

1 Mongodb介绍

# 1 一个非关系型数据库(表和表间没联系,不能建外键),文档型数据库(json存储的)
## Mongodb可以存特殊的集合类型(一个字段可以存字典,列表)。mysql是不支持这种格式的,如果要存,只能转成json格式存到字段里。实在没办法了,在字段里存json格式,加删数据,把json改下存进去。

# 2 mysql       mongodb
    数据库       数据库(database)
      表          集合(collection)
    行          文档(document)
    列          field(字段)
    索引         索引
    连表         不支持(可以用子查询(表join不支持,像django orm__连表关联查询不支持))#大型项目一般不建外键关联,join。这两种非常异响性能
    主键         将_id字段设为主键
    
# 3 文档 就是个字典{"name":"lqz","age":18}    ##意味着可以直接传给前端,不需要用orm,把数据转成json格式给前端
## 需要注意的点: 
    #文档中的键/值是有序的
    #值可以是字符串,数字,其他集合类型(列表,字典)
    #类型区分大小写
    #文档中不能有重复的键
    #文档中的值可以是多种不同的数据类型,也可以是一个完整的内嵌文档。键可以是任意UTF-8字符

# 4 一组文档组成一个集合
        -小小的问题(可以组成一个文档)
      {"name":"lqz","age":18}
      {"yyy":"yyy","kkk":90}
      {"xxx":"xxx"}
      
# 5 多个集合组成一个数据库

# 6 安装和启动
    -下载安装包:https://www.mongodb.com/dr/fastdl.mongodb.org/win32/mongodb-win32-x86_64-2012plus-4.2.6-signed.msi/download
  -需要下载个客户端(类似于:Navicat),robo 3T
  
# 7 安装    # 在linux和mac下,只要把包解压开就行,不需要安装
    -mongodb-win32-x86_64-2012plus-4.2.6-signed.msi一路下一步,将mogodb设置成服务,注意数据目录和日志目录,mongod compass那个玩意不要装    # 最好默认装c盘,经测试装d盘会报权限问题,删服务,用命令建服务
  -robo3t-1.3.1-windows-x86_64-7419c406.exe. 一路下一步
## 在服务中可以把mongodb服务改成手动启动,开机不用自动启动
    # net start MongoDB
    # net stop MongoDB

mongodb安装

 

robo3t安装

#### 附上之前自己弄的mongodb3.4.10安装方法和使用
    # https://blog.csdn.net/baidu_31333625/article/details/73126657       配置
    # 客户端登录服务,注意,这里通过localhost登录,如果需要远程登录,必须先登录认证才行。 
         # mongo --port 27017 
    # django增删查改
        # https://blog.csdn.net/kuangshp128/article/details/79039366

 

2 mongodb的启动和配置

# 1  mongodb的启动命令
-C:\Program Files\MongoDB\Server\4.2\bin\mongod.exe" --config "C:\Program Files\MongoDB\Server\4.2\bin\mongod.cfg" --service    
-mongod.exe --config 配置文件

-在mongdb的安装路径下bin路径有:mongod.exe(服务端) 和 mongod.cfg(配置文件)  mongo.exe(客户端)
    
-在终端到路径下(或加入环境变量)输入mongo.exe,可以连接进去
show databases; # 可以查看所有的数据库
-一般我们喜欢用图形化客户端连接:robo3t
    -create---》输入地址,端口号--》连接

配置文件

storage:
  dbPath: C:\Program Files\MongoDB\Server\4.2\data        # 数据路径
  journal:
    enabled: true

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path:  C:\Program Files\MongoDB\Server\4.2\log\mongod.log        # 日志文件路径

# network interfaces
net:
  port: 27017        # 监听的端口号
  bindIp: 0.0.0.0    # 绑定的地址0.0.0.0代表远程可以连接

# 2 可以使用客户端连接
./mongo --host 10.0.0.5 --port 27017
# 3 可以用图形化界面的客户端连接

 

3 账号管理

# 1 跟mysql有点区别:mongodb的用户是建在数据库下的,但是可以对其他库有权限(mysql用户是单独存在库里,也是user表)
    # ——可以用robo3t,在System下admin库下Users表中右键Add User创建用户(也可以用下面方法添加)

# 2 操作步骤(全局有一个db,在哪个库下,db就是谁)
    -show databases;  # 查看多有数据库
  -use admin;      # 使用admin这个库    # 输入db可以看当前在哪个库下
  -db.createUser(    # db的一个方法,在当前库下创建一个用户
  {
    user: "root",    # 用户名
    pwd: "123",        # 方法
    roles: [ { role: "root", db: "admin" } ]    # 用户的权限,用户管理的数据库(对哪个库操作)
  }
)    # 创建成功后,可以在图形界面里打开Users表看到
    
use test # 空数据库不显示
db.createUser(
  {
    user: "lqz",
    pwd: "123",
    roles: [ { role: "readWrite", db: "test" },    # 权限为读写,针对的是test库
             { role: "read", db: "db1" } ]        # 权限为只读,针对的是db1库
  }
)
# 5 查看用户
db.getUser("root")    # 参看名字为root的人
-show users            # 查看当前库下的账户

#### 了解
#3、重启数据库
net stop MongoDB
net start MongoDB
#需要以开启认证的方式启动mongodb服务
mongod --config "mongod.cfg" --auth

#4、登录:注意使用双引号而非单引号
#以管理员登陆
./mongo --host 10.0.0.5 --port 27017 -u "root" -p "123" --authenticationDatabase "admin"
# 以用户lqz登陆(只对test库有权限)
./mongo --host 10.0.0.5 --port 27017 -u "lqz" -p "123" --authenticationDatabase "test"
mongo --port 27017 -u "root" -p "123" --authenticationDatabase "admin"

也可以在登录之后用db.auth("账号","密码")登录
mongo
show dbs
use admin
# db是一个全局变量,代表当前所有库
db.auth("root","123")
show tables;

 

4 数据库的curd操作

# 增加
use test   # 有就进去,没有就创建并进去(如没有数据,表并没真正生成) # 输入db可以看当前是什么库
db.t1.insert({"name":"lqz"})  # 库,集合,文档全都进去了(朝test库下面的t1表里插入数据,表会生成)
#注意: db.t1.insert({"yy":"lqz"}) # db.t1.insert({"xx":"lqz"})    ## 字段完全不一致也可以插入

# 查询
show databases;
show dbs    # 两种方法都行

# 删除
use test #先切换到要删的库下
db.dropDatabase() #删除当前库

5 集合操作

# 新增
use test
db.table1.insert({"name":"lqz"}) # 有table1就使用,没有就新增(此处若没test,也会创建)
db.table2.insert({'b':2})
# 查询(都可以)
show tables    # 为了和mysql统一语法
show collections
# 删除
db.table1.drop()

 

6导出导入数据库

导出数据库

mongodump -h localhost --port 27017 -d perspective -o C:\Users\ldc\Desktop\新建文件夹

>mongodump -h dbhost -d dbname -o dbdirectory

-h:MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017

-d:需要备份的数据库实例,例如:test

-o:备份的数据存放位置,例如:c:\data\dump,当然该目录需要提前建立,在备份完成后,系统自动在dump目录下建立一个test目录,这个目录里面存放该数据库实例的备份数据。

 

导入数据库

解压

 在cmd中输入命令导入本地库中(命令路径要先添加到环境变量中     -drop 后面跟导入文件的路径)

mongorestore -h localhost --port 27017 -d perspective --drop C:\Users\a\Desktop\perspective\perspective

>mongorestore -h dbhost -d dbname --directoryperdb dbdirectory

-h:MongoDB所在服务器地址

-d:需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2

--directoryperdb:备份数据所在位置,例如:c:\data\dump\test,这里为什么要多加一个test,而不是备份时候的dump,读者自己查看提示吧!

--drop:恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦!

推荐阅读