mongodb是一个基于文档的强大、灵活、易于扩展的通用型数据库。是基于分布式文件存储的数据库。其由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
mongodb也是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
目录
一、MongoDB简介
1.1 简介
1.2 基本概念
二、MongoDB常规操作
2.1 数据库操作
2.2 集合操作
2.3 数据类型
2.4 文档操作
一、MongoDB简介
1.1 简介
mongodb是一个基于文档的强大、灵活、易于扩展的通用型数据库。是基于分布式文件存储的数据库。其由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。其主要特点如下:
(1)其使用文档来替代关系型数据库表的结构,每条数据不在要求其有无和一致性的类型。
(2)每个文档可以具备丰富的层次结构,而不是并列的属性数据。当然对于检索等情况下也不是很建议这样处理。
(3)使用横向扩展技术,面向文档的数据模型更易扩展。
(4)具备更加丰富、独特、易用的检索功能。
(5)基于内存的储存检索,性能更佳。
1.2 基本概念
数据库:
数据库和传统的关系型数据库差不多的概念,每个数据库含有多个集合,每个数据库最后会作为文件储存至服务器中,另外还有一些特殊的数据库进行了保留如下:
admin:类似于root数据库,如果将用户添加至admin数据库将获取所有数据库的权限,其中一些比如查找所有数据库、关闭服务器的服务端命令只能从这里运行。
local:存储当前服务器所有本地集合的数据库,永远不可以复制。
config:主要是存储分片等信息
集合(table):
相当于表结构,一个数据库下有多个集合。
但是与传统关系型数据库不同,关系型数据库譬如mysql,postgresql等都需要比较确切的表结构,但是对于MongoDB的集合,可以存储不同结构的数据,eg:
{"name":"张三","age":"15"}
{"name":"李四","age":16,"height":180}
{"title":"我的世界"}
对于上述数据都可以存储在一个集合里面,在该集合的上述三条数据,不仅仅是字段不同,连同一个字段age的数据类型都不同,这边是集合的动态扩展。虽然MongoDB支持该方式,但是作为开发还是建议将不同类型的数据分开到不同的集合之中更为稳妥:
首先,将各种类型的数据放到同一个数据库之中,后续进行管理查看的时候需要进行针对性的筛选很费劲;
其次,对于同名但是不同含义的字段检索存在歧义;
最后补充,在进行数据检索时,包括索引创建等,对于同一类数据进行操作更为快捷,其体现在索引创建上,进行检索时查找数据量级上等。
文档 (行数据)
文档则相当于传统关系型数据的行数据,对于集合中的介绍,我们基本也了解到了集合的结构并非是非常固定的结构,但是对于其中还是要注意,文档不能出现相同名称的属性。
主键
主键是MongoDB比较特殊的存在,一个mysql表可以不设置主键,但是对于MongoDB是一定会有一个唯一性的Id,你可以使用一个确定的Id值,也可以不进行设置,由MongoDB生成一个唯一的ObjectId作为Id。ObjectId作为的Id可以适配分布式的情况,具体详见官网介绍:ObjectId — MongoDB Manual
二、MongoDB常规操作
2.1 数据库操作
2.1.1 查看:
MongoDB对于数据库的查看
#推荐 show dbs #不推荐 show databases
2.1.2 创建
对于数据库的创建,MongoDB并未提供一个独立的接口,而是使用类似于mysql这种use <database> 的语法,当使用的数据库不存在时则进行创建
# 切入 test 数据库,此时触发 test 数据库的创建工作 use test db.myCollection.insertOne( { x: 1 } );
【注】 当只是use <new database> 时,没有进行集合、文档操作,此时不会创建该数据库,只有真正操作集合后才会创建。
2.1.3 删除
对于数据库的删除,只需要简单的进入到该数据库执行db.dropDatabase()方法即可
# 删除代码执行前最好是进入改数据库后执行 use <database> db.dropDatabase()
2.2 集合操作
2.2.1 集合创建
db.createCollection(name, options)参数说明:
- name: 要创建的集合名称
- options: (可选)参数的集合
options 可以是如下参数:
参数名 类型 描述 capped 布尔 (可选)如果为 true,则创建最大容量的集合,如果超出容量capped集合将自动的覆盖旧数据,当设置为true时,则需要指定size参数大小进行设置 autoIndexId 布尔 (可选)如为 true,自动在 _id 字段创建索引。默认为 false。【3.4版本开始移除该参数,详见[SERVER-19067] Warn at creation that autoIndexId:false is deprecated - MongoDB Jira】 size 数值 (可选)为固定集合指定一个最大值,即字节数。
如果 capped 为 true,也需要指定该字段。max 数值 (可选)指定固定集合中包含文档的最大数量。 [注]在插入文档时,MongoDB 首先检查固定集合的 size 字段,然后检查 max 字段。
示例:
1. 直接创建一个集合:
db.createCollection("<collectionsName>")
2. 创建一个带有options操作的集合:
db.createCollection("mycol", { capped : true, size : 6142800, max : 10000 } )
3.也可以直接插入数据,这样也会自动创建一个集合
db.tutorialspoint.insert({"name" : "tutorialspoint"})
2.2.2 删除集合
集合删除很简单,直接db.<collectionName>.drop()
db.tutorialspoint.drop()
2.3 数据类型
MongoDB supports many datatypes. Some of them are −
String − This is the most commonly used datatype to store the data. String in MongoDB must be UTF-8 valid.
Integer − This type is used to store a numerical value. Integer can be 32 bit or 64 bit depending upon your server.
Boolean − This type is used to store a boolean (true/ false) value.
Double − This type is used to store floating point values.
Min/ Max keys − This type is used to compare a value against the lowest and highest BSON elements.
Arrays − This type is used to store arrays or list or multiple values into one key.
Timestamp − ctimestamp. This can be handy for recording when a document has been modified or added.
Object − This datatype is used for embedded documents.
Null − This type is used to store a Null value.
Symbol − This datatype is used identically to a string; however, it's generally reserved for languages that use a specific symbol type.
Date − This datatype is used to store the current date or time in UNIX time format. You can specify your own date time by creating object of Date and passing day, month, year into it.
Object ID − This datatype is used to store the document’s ID.
Binary data − This datatype is used to store binary data.
Code − This datatype is used to store JavaScript code into the document.
Regular expression − This datatype is used to store regular expression.
2.4 文档操作
2.4.1 新增
1. 使用insert(documents)方法
#单个插入 db.mycol.insert({"name":"张三","age":18}) #多个插入 db.mycol.insert([{"name":"李四","age":18},{"name":"王五"}])
2. insertOne(document)方法
db.mycol.insertOne({"name":"张三One","age":18})
3. insertMany(documents)方法
db.mycol.insertMany([{"name":"李四M","age":18},{"name":"王五M"}])
2.4.2 删除
文档删除主要是使用drop方法,但是要注意对于capped collection无法进行删除操作,以下则是进行具体操作的示例,这里先造点数据
db.test.insert([{"name":"李四","age":18},{"name":"王五"},{"name":"赵六","age":18},{"name":"Tom","age":19},{"name":"Anna","age":20}])
示例:
1. 简单进行条件删除:
db.test.remove({'name':'王五'})
2. 在version2.6 及其后续版本提供了更为复杂的删除方案:
db.collection.remove( <query>, { justOne: <boolean>, writeConcern: <document>, collation: <document>, let: <document> // Added in MongoDB 5.0 } )
参数
类型
描述
query
document
使用query operators指定删除条件。要删除集合中的所有文档,请传递空文档(
{}
)。
justOne
boolean
可选的。要将删除限制为仅一个文档,请设置为
true
。省略使用false
的默认 value 并删除符合删除条件的所有文档。
writeConcern
document
可选的。表示写关注的文件。省略使用默认写入问题。见写关注。 如果在事务中运行,请不要为操作明确设置写关注点。要对事务使用写关注,请参见 事务和写关注。
collation
document
可选的。 指定要用于操作的排序规则。 排序规则允许用户为 string 比较指定 language-specific 规则,例如字母和重音标记的规则。 排序规则选项具有以下语法: collation:{ locale:<string>, caseLevel:<boolean>, caseFirst:<string>, strength:<int>, numericOrdering:<boolean>, alternate:<string>, maxVariable:<string>, backwards :<boolean> } 指定排序规则时,
locale
字段是必填字段;所有其他校对字段都是可选的。有关字段的说明,请参阅整理文件。 如果未指定排序规则但集合具有默认排序规则(请参阅db.createCollection()),则操作将使用为集合指定的排序规则。 如果没有为集合或操作指定排序规则,MongoDB 使用先前版本中用于 string 比较的简单二进制比较。 您无法为操作指定多个排序规则。对于 example,您不能为每个字段指定不同的排序规则,或者如果使用排序执行查找,则不能对查找使用一个排序规则,而对排序使用另一个排序规则。 version 3.4 中的新内容。
对于mongodb的基本操作基本讲解完毕,那么下一章节开始介绍如何去查询内容。
上一章:MongoDB安装(CentOS7)_童懵的博客-CSDN博客
下一章:
参考文献:
MongoDB Documentation
MongoDB Tutorial