1.概念篇
MongoDB和MySQL分别作为非关系型数据库和关系型数据库的代表,通过它们之间的对比可以很快的建立起对MongoDB的认知。
MongoDB | MySQL |
---|---|
数据库(Database) | 数据库(Database) |
集合(Collection) | 表(Table) |
文档(Document) | 记录(record) |
对于关系型数据库,一般来说,我们可以简单的理解为:一个数据库管理应用,可以创建多个数据库(databases),每个数据库可以管理很多个表(tables),表中存储的就是可以CURD的记录(records),这种管理层级同样可以映射到MongoDB上。
与MySQL不同的是,MongoDB的数据具有灵活的模式 。集合本身没有对文档结构的规则性校验,而表的设计从一开始就约束死了记录该包含的字段名。
需要注意的是,MongoDB作为非关系型数据库,不是说其我们使用时不能设计成关系型的结构,我们同样可以人为地约束(document)文档结构包含的数据的类型,(与MySQl不同的是,MongoDB的文档支持数组和对象、子文档等复杂的数据结构)同样文档之间也可以设计成类似ER图的关系模型。
下面是官网提供的一个书籍分类树形结构数据建模的例子

传统的关系型数据库的设计思想是把每个节点当做一个记录,每个节点保存其父节点的_id.
_id | parent |
---|---|
MongoDB | Databases |
dbm | Databases |
Databases | Programming |
Languages | Programming |
Programming | Books |
Books | null |
这种关系也可以使用MongoDB存储
db.categories.insert( { _id: "MongoDB", parent: "Databases" } )
db.categories.insert( { _id: "dbm", parent: "Databases" } )
db.categories.insert( { _id: "Databases", parent: "Programming" } )
db.categories.insert( { _id: "Languages", parent: "Programming" } )
db.categories.insert( { _id: "Programming", parent: "Books" } )
db.categories.insert( { _id: "Books", parent: null } )
其他几种树形结构的建模方法请参考
Model Tree Structures
Modeling a Tree in a Document Database
2.快速操作篇
- 下载安装客户端 https://docs.mongodb.com/manual/administration/install-community/
开启MongoDB服务
(1)创建数据库存储目录mkdir -p ~/yourdir/db
确保当前用户拥有该目录的读写权限
(2)开启服务mongod --dbpath <path to data directory>
再此之前确保mongod命令路径已经加入到了系统环境变量
使用mongo shell 操作数据库
(1)连接到数据库,开启命令模式mongo --host 127.0.0.1:27017
如果使用默认参数,后面的参数可以省略
(2)显示目前操作的数据库db
(3)切换数据库
use <database>
当第一次存储数据到数据库时,MongoDB会自动创建数据库及集合
use myNewDatabase db.myCollection.insertOne( { x: 1 } );
上面的
insertOne
语句会自动创建myNewDatabase
数据库,与myCollection
集合。
3.MongoDB 增删改查 操作
- 增
db.collection.insertOne()
db.collection.insertMany()
- 删
db.collection.deleteOne()
db.collection.deleteMany()
- 改
db.collection.updateOne()
db.collection.updateMany()
db.collection.replaceOne()
- 查
db.collection.find()