简介

关系型数据库

  • 数据库 --> 表 --> 记录

MongoDB

  • 数据库 --> 集合 --> 文档
  • 在MongoDB中如果是一个空的数据库, 空的集合, 是不显示的, 只集合中有文档数据才显示出来
  • 应用场景: 对数据量要求大, 对事务(原子性)要求不高

image-20200418224332781

下载安装

使用

数据库操作

  • show dbs; # 查看所有数据库
  • use database1; # 切换到database1数据库, 如果没有database1数据库则会创建
  • db; # 查看当前使用的数据库
  • db.dropDatabase(); # 删除当前数据库

集合操作

  • db.collection1.insert({'a': 1}); # 创建集合collection1并往其中添加一条文档数据
  • show collections; # 查看所有集合
  • db.collection1.drop(); # 删除集合collection1

账号管理

  • mysql创建的用户是在内置的mysql数据库的user表中
  • MongoDB中的用户是与数据库关联的, 但是可以给一个数据库下的用户分配另一个数据库的权限
'''
# 创建root用户, 拥有所有数据库的所有权限
db.createUser(
  {
    user: "root",
    pwd: "Cql123456",
    roles: [ { role: "root", db: "admin" } ]
  }
)

# 创建普通用户并指定权限
db.createUser(
  {
    user: "cql",
    pwd: "Cql123456",
    roles: [ { role: "readWrite", db: "test" },
             { role: "read", db: "db1" } ]
  }
)

# 管理员登录
mongo --host 10.0.0.5 --port 27017 -u "root" -p "123" --authenticationDatabase "admin"

# C:\Program Files\MongoDB\Server\4.2\bin\mongod.cfg
net:
  port: 27017
  bindIp: 0.0.0.0  # 允许外界任何ip连接
'''

文档操作

  • db.collection1.insert({...}); # 插入单条文档

  • db.collection1.insertMany([{...}, {...}, ...]); # 插入多条文档

  • db.collection1.save({"_id": 1, ...}); # 修改

  • 比较运算

    '''
    MySQL: select * from teacher where name = "lqz";
    MongoDB: db.teacher.find({"name": "lqz"}).pretty();
    
    MySQL: select * from teacher where name != "lqz";
    MongoDB: db.teacher.find({"name": {"$ne": "lqz"}}).pretty();  
    # $ne: not equal, $gt: greater than, $lte: less than equal
    '''
    
  • 逻辑运算

  • 待续

分布式id生成的方案

  • 待续