一、MongoDB简介
MongoDB是一款基于C++开发的文档型数据库。与传统的关系型数据库有所不同,MongoDB面向的是文档,所谓的文档是一种名为BSON (Binary JSON:二进制JSON格式)是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
笔者用的是最新的Mongo7.0,客户端工具则使用的是Navicat。
二、MongoDB和MySQL的区别
这里直接引用知乎上的一篇文章,个人感觉写的比较清楚。https://zhuanlan.zhihu.com/p/689412013
三、基本概念
1、数据库:DB
指的就是Mongo的一个实例和MySQL中的数据库接本一致,用于保存一个活动多个集合。
2、集合:Collection
集合是Mongo中的概念,对应到MySQL中就是一张表,例如 user表、order表等
3、文档:Document
Mongo是面向文档的数据库,文档是Mongo中最基本的数据单位,对应到MySQL中就是某张表里的一条数据。
4、索引:Index
索引是一种用于加快查询的数据结构,这一点和MySQL中类似。但是也有一定的区别,Mongo中的索引数据结构是B树,而MySQL中默认是B+树
5、小结
Mongodb | Mysql |
---|---|
DB 数据库 | DB数据库 |
集合Collection | 某一张表 |
文档Document | 某一条数据 |
索引Index | 索引 |
四、基本操作
1、使用某个数据库
在这里我们有一个名为test的数据库,如果我们想要使用该数据库,可以使用命令 use
我们在客户端工具(这里笔者用的是Navicat)使用命令 use test,结果如下:
2、集合
2.1、创建集合
创建集合对应到MySQL中就是创建一张表,集合就是我们用于保存文档的地方。创建集合的命令如下
db.createCollection(, )
name:集合的名称
options:可选项
完整的格式如下:
db.createCollection( <name>,{capped: <boolean>,timeseries: { // Added in MongoDB 5.0timeField: <string>, // required for time series collectionsmetaField: <string>,granularity: <string>,bucketMaxSpanSeconds: <number>, // Added in MongoDB 6.3bucketRoundingSeconds: <number> // Added in MongoDB 6.3},expireAfterSeconds: <number>,clusteredIndex: <document>, // Added in MongoDB 5.3changeStreamPreAndPostImages: <document>, // Added in MongoDB 6.0size: <number>,max: <number>,storageEngine: <document>,validator: <document>,validationLevel: <string>,validationAction: <string>,indexOptionDefaults: <document>,viewOn: <string>,pipeline: <pipeline>,collation: <document>,writeConcern: <document>})
参数解释:由于篇幅限制这里不赘述,直接引用官网的内容
db.createCollection()
实操:创建一个名为learnMongo的集合
方式一:使用db.createCollectoin命令:db.createCollection(“learnMongo”)
结果:
方式二:直接插入文档,如果对应的集合不存在Mongo会自动帮我们创建集合
例如:db.learnUseMongo.insert({“name”:“hardy”,“age”:29,“gender”:“male”})
结果:WriteResult({ “nInserted” : 1, “writeConcernError” : [ ] }) 从结果中可以看出插入了一条文档
同时当前集合中也存在一条我们刚刚插入的数据
2.1、查询集合
正如我们在MySQL中想查看当前数据库有多少表一样,Mongo中也可以查看当前数据库中有多少个集合。
1、查询所有集合的名称:db.getCollectionNames()
2、查询指定名称的集合
2.2、删除集合
例如我们要删除名为learnMongo的集合
语法 db..drop()
3、文档
文档是是MongoDB中的数据载体,是一种类似JSON格式的数据,在MongoDB中称之为BSON(Binary JSON),既然是一种类似JSON的格式,所以 BSON也是 key-value形式的,形如
3.1、创建文档
在上一节中我们创建了集合(相当于是Mysql中的表),有了集合接下来我们就可以往集合里插入数据。插入数据的语法:db..insert(,)
参数:
参数 | 类型 | 说明 |
---|---|---|
collection | 字符串 | 要插入的集合,如果不存在则会自动创建 |
document | 文档或数组 | 要插入到集合中的文档或文档数组。 |
writeConcern | 文档 | 可选。表达写关注的文档。省略以使用默认的写关注。请参阅写关注 |
如果是在事务中运行,则请勿显式设置此操作的写关注。要将写关注与事务一起使用,请参阅事务和写关注。 | ||
ordered | 布尔 | 可选。如果为 true ,则对数组中的文档执行有序插入,如果其中一个文档发生错误,MongoDB 将返回,而不处理数组中的其余文档。 |
如果为 false ,则执行无序插入,如果其中一个文档发生错误,则继续处理数组中的其余文档。 | ||
默认值为 true 。 |
示例:
db.users.insert({name: {first: "Alan",last: "Turing"},birth: new Date('Jun 23, 1912'),death: new Date('Jun 07, 1954'),contribs: ["Turing machine", "Turing test", "Turingery"],views: NumberLong(1250000)
})
结果:
与之类似的还有 db..insertOne(,)以及db..insertMany(,)。用法与上述基本一致,这里不在赘述。
由于篇幅限制,先写到这里希望对你有所帮助。