Appearance
MongoDB
1.NoSQL 简介
2.MongoDB 概念解析
| SQL术语/概念 | MongoDB术语/概念 | 解释/说明 | 
|---|---|---|
| database | database | 数据库 | 
| table | collection | 数据库表/集合 | 
| row | document | 数据记录行/文档 | 
| column | field | 数据字段/域 | 
| index | index | 索引 | 
| table | joins | 表连接,MongoDB不支持 | 
| primary | key | primary key 主键,MongoDB自动将_id字段设置为主键 | 
3.MongoDB安装
强烈推荐使用Docker安装!以下为 docker-compose 示例
数据存放目录
# 建立本地 mongo 目录
mkdir mongo & mkdir mongo/initdb
# 初始化脚本js等
mkdir mongo/initdb
# 数据库保存文件夹
mkdir mongo/datadir
# 数据库服务设置
mkdir mongo/configdb
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
docker-compose.yml
version: '3'
services:
    mongo:
        image: mongo:4.2
        container_name: mongo
        ports: 
            - '27017:27017'
        command: --auth
        volumes:
            - /Users/elliot/database/mongo/initdb:/docker-entrypoint-initdb.d
            - /Users/elliot/database/mongo/datadir:/data/db
            - /Users/elliot/database/mongo/configdb:/data/configdb
        environment:
            MONGO_INITDB_ROOT_USERNAME: MongoDBAdmin
            MONGO_INITDB_ROOT_PASSWORD: TxServerMongo
            MONGO_INITDB DATABASE: mydb
            TZ: Asia/Shanghai
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
docker-compose 服务的启动及停止
PS:要进入对应目录(/Users/elliot/database/mongo)执行命令,否则会报错
# 编译服务
docker-compose build
# 容器启动(精灵线程)
docker-compose up -d
# 查询容器状态
docker-compose ps
# 容器停止
docker-compose stop
# 容器停止+消除(容器+网络)
docker-compose down
# 容器停止+消除(容器+网络+镜像)
docker-compose down --rmi all
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
4.MongoDB连接
推荐官方出品的免费软件 MongoDB Compass,
mongodb://用户名:密码@localhost:27017/?authMechanism=DEFAULT
1
MongoDB Compass: 
5.数据库相关操作
| 命令 | 解释 | 说明 | 
|---|---|---|
| show dbs | 查看所有数据库 | 空数据库不会展示 | 
| use 库命 | 使用(创建)数据库 | 存在则切换,不存在则创建 | 
| db | 显示当前数据库 | - | 
| db.dropDatabase() | 删除数据库 | 删除数据库 | 
默认库说明:
admin: 是"root"数据库,如果将一个用户添加到这个数据库中,这个用户自动继承数据库的权限,一些特定的服务器命令也只能从这个数据库运行(如:列出所有数据库或关闭服务器)
local: 这个库永远不会被复制,可用来存储咸鱼本地单台服务器的任意集合
config: 当MongoDB用于分片设置时,config数据库在内部使用,用于保存分片的相关信息
6.集合相关操作
| 命令 | 解释 | 说明 | 
|---|---|---|
| show collections/tables | 查看所有集合 | - | 
| db.createCollection('集合名称',[options]) | 创建集合 | 向不存在的集合插入数据会自动创建集合 | 
| db.集合名称.drop() | 删除集合 | - | 
createCollection说明:
capped(布尔值):如果为true,则创建固定集合(指有固定大小的集合,当打到最大值时,会覆盖最早的文档,当值为true时,必须指定size参数)
size(数值):为固定集合指定的一个最大值(字节数),如 capped为true,也需要指定该字段
max(数值):指固定集合中包含文档的最大数量
7.文档相关操作
插入文档
单条
db.集合名称.insert({name: 'Elliot',age: 32})
1
多条
db.集合名称.insertMany(
    [<document 1>],[<document 2>],
    {
        writeConcern: 1, // 写入策略,默认1,要求确认写操作,0则不要求,
        ordered: true, // 指定是否按顺序写入,默认true,按顺序写入
    }
)
      
// insert 也可以添加多条
db.集合名称.insert(
    [<document 1>],[<document 2>],
    {
        writeConcern: 1, // 写入策略,默认1,要求确认写操作,0则不要求,
        ordered: true, // 指定是否按顺序写入,默认true,按顺序写入
    }
)
// 脚本
for (let i=0;i<100;i++) {
	db.user.insert({"_id":1,"name":"Elliot" + 1,"age": 32})
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
查询文档
db.集合名称.find();
1
删除文档
db.集合名词.remove(
  <query>,
  {
    justOne: <boolean>,
    writeConcern: <document>,
  }
)
1
2
3
4
5
6
7
2
3
4
5
6
7
更新文档
db.集合名称.update(
    <query>, // update的查询条件,类似于sql update 查询neiwhere后的部分
    <update>, // update对象和一些更新的操作符等,也可以理解为sql upate查询内set后的部分
    {
        upsert: <boolean>, // 可选,默认false,如果不存在update,是否插入objNew,true:插入,false:不插入
        multi: <boolean>, // 可选,默认false,只更新找到的第一条记录,如果这个参数为true,则会把按照条件查出来的多条记录全部更新
        writeConcern: <document>, // 可选,抛出异常的级别
    }
)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
PS:db.集合名称.update({"name":"Elliot"},{$set:{"name":"Elliot"}}),如果不加$set,会将原始数据全部删除后再添加
 Elliot Knight
Elliot Knight