# 使用 Mongodb

首先说一下 Mongodb 的三个层级:数据库(datebase)集合(collection)文档(document)

对比 mysql的话,两者的层级概念对应关系大概如下:

数据库 层级 1 层级 2 层级 3
mysql database 一行数据
mongodb database 集合 文档

# Compass 中的体现

之所以说 Mongodb 可以存储松散类型的数据。如下,在同一个集合中,每个文档存储的数据类型都可以不同:

An image

# Mongodb 命令

在通过 brew services start mongodb-community 启动 mongodb 数据库后,输入 mongo 回车即可进入命令行工具。

  1. show dbs 展示全部的数据库

  2. use 数据库名称 使用或创建一个数据库,如果名称对应的数据库不存在就创建一个;否则就使用指定的数据库

  3. show collections 展示当前数据库的全部集合

  4. db.集合名称.insert({}) 在某个集合中插入数据内容

    • db 由于对集合操作时,就已经进入某一个数据库中。所以 db 是一个统称,表示当前数据库
    • 集合名称 就写对应的集合即可,比如 db.blogs 指的是该数据库下的 blogs 集合
    • insert({}) 就是插入行为了,由于文档是一个json数据形式,所以正常写入 json 数据结构即可
  5. db.集合名称.find({ 条件key: 条件value }) 过滤某个集合中数据内容

    • db集合名称 和上述相同
    • find() 是查询行为,不传入参数表示查询全部数据
    • 筛选条件也是 json形式,如 db.blogs.find({"author": "zhangsan"})
  6. db.集合名称.update({ 条件key: 条件value }, {$set: { "更新 key": "更新的 value" } }) 更新某个集合数据

    • db集合名称 和上述相同
    • update() 是更新行为
    • 参数1 一个 json
    • 参数2 更新的内容, 一个 json, $set 为 key,value 是更新的json数据
  7. db.集合名称.remove({ 条件key: 条件value }) 删除操作

  8. sort({ 条件key: 条件value }) 排序 操作,比如 db.users.find().sort({ _id: -1 }) 就是针对 _id 做倒序排序

TIP

db.集合名称.insert() 操作还有创建集合的作用,如果执行 insert 时对应的集合名称并不存在,会直接创建对应的集合。