Mongodb简介(一)
一、Mongodb介绍
1.1 Nosql的介绍
NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。
NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。我们如果要对这些用户数据进行挖掘,那SQL数据库已经不适合这些应用了, NoSQL数据库的发展也却能很好的处理这些大的数据。
优点:
大数据量 :可以通过廉价服务器存储大量的数据,轻松摆脱传统mysql单表存储量级限制。
高扩展性 : Nosql去掉了关系数据库的关系型特性,很容易横向扩展,摆脱了以往老是纵向扩展的诟病。
高性能 :Nosql通过简单的key-value方式获取数据,非常快速。还有NoSQL的Cache是记录级的,是一种细粒度的Cache,所以NoSQL在这个层面上来说就要性能高很多。
灵活的数据模型 :NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦。
高可用 :NoSQL在不太影响性能的情况,就可以方便的实现高可用的架构。比如mongodb通过mongos、mongo分片就可以快速配置出高可用配置。
关系型数据库遵循ACID规则:
A (Atomicity) 原子性
原子性很容易理解,也就是说事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。
比如银行转账,从A账户转100元至B账户,分为两个步骤:1)从A账户取100元;2)存入100元至B账户。这两步要么一起完成,要么一起不完成,如果只完成第一步,第二步失败,钱会莫名其妙少了100元。
C (Consistency) 一致性
一致性也比较容易理解,也就是说数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束。
例如现有完整性约束a+b=10,如果一个事务改变了a,那么必须得改变b,使得事务结束后依然满足a+b=10,否则事务失败。
I (Isolation) 独立性
所谓的独立性是指并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。
比如现有有个交易是从A账户转100元至B账户,在这个交易还未完成的情况下,如果此时B查询自己的账户,是看不到新增加的100元的。
D (Durability) 持久性
持久性是指一旦事务提交后,它所做的修改将会永久的保存在数据库上,即使出现宕机也不会丢失。
CAP定理:
在计算机科学中, CAP定理(CAP theorem), 又被称作 布鲁尔定理(Brewer's theorem), 它指出对于一个分布式计算系统来说,不可能同时满足以下三点:
一致性(Consistency) (所有节点在同一时间具有相同的数据)
可用性(Availability) (保证每个请求不管成功或者失败都有响应)
分隔容忍(Partition tolerance) (系统中任意信息的丢失或失败不会影响系统的继续运作)
CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。
因此,根据 CAP 原理将 NoSQL 数据库分成了满足 CA 原则、满足 CP 原则和满足 AP 原则三 大类:
CA - 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。
CP - 满足一致性,分区容忍性的系统,通常性能不是特别高。
AP - 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些。

RDBMS vs NoSQL:
RDBMS
- 高度组织化结构化数据
- 结构化查询语言(SQL) (SQL)
- 数据和关系都存储在单独的表中。
- 数据操纵语言,数据定义语言
- 严格的一致性
- 基础事务
NoSQL
- 代表着不仅仅是SQL
- 没有声明性查询语言
- 没有预定义的模式
-键 - 值对存储,列存储,文档存储,图形数据库
- 最终一致性,而非ACID属性
- 非结构化和不可预知的数据
- CAP定理
- 高性能,高可用性和可伸缩性
分布式计算的优缺点:
优点:
可靠性(容错):分布式计算系统中的一个重要的优点是可靠性。一台服务器的系统崩溃并不影响到其余的服务器。
可扩展性:在分布式计算系统可以根据需要增加更多的机器。
资源共享:共享数据是必不可少的应用,如银行,预订系统。
灵活性:由于该系统是非常灵活的,它很容易安装,实施和调试新的服务。
更快的速度:分布式计算系统可以有多台计算机的计算能力,使得它比其他系统有更快的处理速度。
开放系统:由于它是开放的系统,本地或者远程都可以访问到该服务。
更高的性能:相较于集中式计算机网络集群可以提供更高的性能(及更好的性价比)。
缺点:
故障排除:故障排除和诊断问题。
软件:更少的软件支持是分布式计算系统的主要缺点。
网络:网络基础设施的问题,包括:传输问题,高负载,信息丢失等。
安全性:开发系统的特性让分布式计算系统存在着数据的安全性和共享的风险等问题。
NoSQL 数据库分类:
|
类型
|
部分代表
|
特点
|
| 列存储 | Hbase Cassandra Hypertable |
顾名思义,是按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的IO优势。 |
| 文档存储 | MongoDB CouchDB |
文档存储一般用类似json的格式存储,存储的内容是文档型的。这样也就有有机会对某些字段建立索引,实现关系数据库的某些功能。 |
| key-value存储 | Berkeley DB MemcacheDB Redis |
可以通过key快速查询到其value。一般来说,存储不管value的格式,照单全收。(Redis包含了其他功能) |
| 图存储 | Neo4J FlockDB |
图形关系的最佳存储。使用传统关系数据库来解决的话性能低下,而且设计使用不方便。 |
| 对象存储 | db4o Versant |
通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据。 |
| xml数据库 | Berkeley DB XML BaseX |
高效的存储XML数据,并支持XML的内部查询语法,比如XQuery,Xpath。 |
1.2 MongoDB介绍
mongodb简介:
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。MongoDB是一种强大、灵活、可扩展的数据存储方式。它扩展了关系型数据库的众多有用功能,如辅助索引、范围查询(range query)和排序。MongoDB的功能非常丰富,比如内置的对MapReduce式聚合的支持,以及对地理空间索引的支持,让你关注编程本身
MongoDB的数据模型对开发者来说非常友好,配置选项对于管理员来说也很轻松,并且由驱动程序和数据库shell提供的自然语言式的API。MongoDB会为你扫除障碍,让你关注编程本身而不是为存储数据烦恼。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。MongoDB最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单标查询的绝大部分功能,而且还支持对数据建立索引。它是一个面向集合的,模式自由的文档型数据库。
社区版和企业版
社区版是基于SSPL,一种和AGPL基本类似的开源协议
企业版是基于商业协议,需付费使用


MongoDB Vs 关系型数据库
| MongoDB | RDBMS | |
| 数据类型 | 文档类型 | 关系类型 |
| CRUD操作 | MQL/SQL | SQL |
| 高可用 | 复制集 | 集群模式 |
| 横向拓展能力 | 通过原生分片完善支持 | 数据分区或者应用侵入式 |
| 索引支持 |
B-树、全文索引、地理位置索引、 多键(multikey)、索引、TTL索引 |
B树 |
| 开发难度 | 容易 | 困难 |
| 数据容量 | 没有理论上限 | 千万、亿 |
| 扩展方式 | 垂直拓展+水平拓展 | 垂直拓展 |
容量
理论上,mongodb没有容量上的上线,目前已知的百度使用了 3Petabyte 规模的数据容量, 1TB = 1024GB ,1PB = 1024T
MongoDB特色及优势
易用+高效

灵活: 快速响应业务变化
mongodb 也可以通过设置某种限制,来保证对象保证一定的数据模式。
原生的高可用和横向扩展能力
高可用Replica Set(复制集) 建议至少3个节点
MongoDB技术优势总结
- Json结构和对象模型接近,开发代码量低
- Json的动态模型意味着更容易响应新的业务需求
- 复制集提供99.999%高可用
- 分片架构支持海量数据和无缝扩容
mongodb特点:
面向集合(Collenction-Orented)存储,易于存储对象类型的数据。数据被分组存储在数据集中,被称为一个集合(Collenction)。
模式自由(schema-free)
支持动态查询
支持完全索引,包含内部对象
支持查询
支持复制和故障恢复
使用高效的二进制数据存储
自动处理碎片,以支持云计算层次的扩展性
支持Python,PHP,Ruby,Java,C,C#,Javascript,Perl及C++语言的驱动程序,社区中也提供了对Erlang及.NET等平台的驱动程序。
文件存储格式为BSON(一种JSON的扩展)
可通过网络访问
功能:
面向集合的存储:适合存储对象及JSON形式的数据
动态查询:MongoDB支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
完整的索引支持: 包括文档内嵌对象及数组。MongoDB的查询优化器会分析查询表达式,并生成一个搞笑的查询计划。
查询监视:MongoDB包含一系列监视工具用于分析数据库操作的性能
复制及自动故障转移:MongoDB数据库支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制。复制的主要目标是提供冗余及自动故障转移。
高效的传统存储方式:支持二进制数据及大型对象(如照片或图片)
自动分片以支持云级别的伸缩性:自动分片功能支持水平的数据库集群,可动态添加额外的机器。
1.3 Linux下的编译安装
官网文档:https://docs.mongodb.com/manual/
安装文档:https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/
下载地址:https://www.mongodb.com/download-center
所有Centos源码包下载地址:https://www.mongodb.org/dl/linux/x86_64
安装:
# wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.6.23.tgz
# tar zxf mongodb-linux-x86_64-3.6.23.tgz
# mv mongodb-linux-x86_64-3.6.23 /usr/local/mongodb
# vim /etc/profile
########mongodb#############
export PATH=$PATH:/usr/local/mongodb/bin
# mkdir -p /mongodb/data
#创建数据库目录MongoDB的数据存储在data目录的db目录下,但是这个目录在安装过程不会自动创建,所以你需要手动创建/mongodb/data目录。注意:/data/db 是 MongoDB 默认的启动的数据库路径(--dbpath)。
# mkdir -p /mongodb/logs #创建日志文件目录
下面是比较全的启动命令:
/usr/local/mongodb/bin/mongod --dbpath=/mongodb/data/ --logpath=/mongodb/logs/mongodb.log --logappend --bind_ip=0.0.0.0 --port=27017 --fork
# netstat -lntup|grep 27017 #查看下端口
tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 19064/mongod
# /usr/local/mongodb/bin/mongo #连接下本地的mongo,这时候会有一大波warning如果不解决的话
MongoDB shell version v3.6.23
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.23
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
Server has startup warnings:
2017-08-06T17:38:29.080+0800 I STORAGE [initandlisten]
2017-08-06T17:38:29.080+0800 I STORAGE [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2017-08-06T17:38:29.080+0800 I STORAGE [initandlisten] ** See http://dochub.mongodb.org/core/prodnotes-filesystem
2017-08-06T17:38:29.137+0800 I CONTROL [initandlisten]
2017-08-06T17:38:29.137+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2017-08-06T17:38:29.137+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2017-08-06T17:38:29.137+0800 I CONTROL [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2017-08-06T17:38:29.137+0800 I CONTROL [initandlisten]
2017-08-06T17:38:29.137+0800 I CONTROL [initandlisten]
2017-08-06T17:38:29.137+0800 I CONTROL [initandlisten] ** WARNING: soft rlimits too low. rlimits set to 3701 processes, 65535 files. Number of processes should be at least 32767.5 : 0.5 times number of files.
#注,来解决这些warning:
第一个warning: ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
意思是:强烈建议使用带WiredTiger存储引擎的XFS文件系统。但是如果已经是ext4系统的话,也可以所以这里只是warning.
第二个warning: ** WARNING: Access control is not enabled for the database.
意思是:未对数据库启用访问控制,对数据和配置的读写访问不受限制(危险的warning)
第三个warning: ** WARNING: You are running this process as the root user, which is not recommended.
意思是:以root用户身份运行此进程,这是不推荐的。
第四个warning: ** WARNING: soft rlimits too low. rlimits set to 3701 processes, 65535 files. Number of processes should be at least 32767.5 : 0.5 times number of files.
意识是:文件描述符太低了。
设置ulimit
#vi /etc/security/limits.conf
mongod soft nofile 64000
mongod hard nofile 64000
mongod soft nproc 32000
mongod hard nproc 32000
如果是在Centos7上面运行启动的话,还会有两个warning:
WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
#cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
关闭命令:
#echo never > /sys/kernel/mm/transparent_hugepage/enabled
WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
需要将/sys/kernel/mm/transparent_hugepage/defrag设置为never
#cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never
关闭命令:
#echo never > /sys/kernel/mm/transparent_hugepage/defrag
下面该授权的授权,/tmp目录下的mongodb-27017.sock也删掉,切换到mongodb用户再启动一次:
注:如果设置了net.http.enabled等于true,并且开启了security.authorization等于enabled,浏览器访问会让输入用户名和密码。
注:关闭mongodb服务
> use admin
> db.shutdownServer()
#或者 kill -2 mongo的pid,但是千万别kill -9(不然/tmp/mongodb-27017.sock文件还是存在的,影响你下次启动)
安装 python 驱动包
pip install pymongo
检查驱动安装的结果
>>> import pymongo
>>> pymongo.version
'3.10.0'
>>>
连接 mongo
>>> import pymongo
>>> pymongo.version
'3.10.0'
>>> from pymongo import MongoClient
>>> uri = "mongodb://127.0.0.1:27017/?minPoolSize=10&maxPoolSize=100"
>>> client = MongoClient(uri)
>>> print client
MongoClient(host=['127.0.0.1:27017'], document_class=dict, tz_aware=False, connect=True, minpoolsize=10, maxpoolsize=100)
>>>
基本操作
插入记录
>>> test_db = client["foo"]
>>> bar_coll = test_db["bar"] ## 一直到这,其实都有这个数据库,也没有这个表,系统也不会报错
>>> result = bar_coll.insert_one({"string":"Hello World"}) ## 这个时候才创建了数据库、表,并插入了一数据
>>> print result
<pymongo.results.InsertOneResult object at 0x00000000033D2D08>
>>>
查询记录
_id 是系统主键,你不建,他就会自己建一个
>>> result = bar_coll.find_one()
>>> print result
{u'_id': ObjectId('5dfdfb19c94228a74e8ecabf'), u'string': u'Hello World'}
>>>
更新记录
>>> result = bar_coll.update_one({"string":"Hello World"},{"$set":{"from":"Hello Earth!"}})
>>> print result
<pymongo.results.UpdateResult object at 0x00000000033D2FC8>
>>> result = bar_coll.find_one()
>>> print result
{u'_id': ObjectId('5dfdfb19c94228a74e8ecabf'), u'from': u'Hello Earth!', u'string': u'Hello World'}
>>>
删除记录
>>> result = bar_coll.remove({"string":"Hello World"})
>>> print result
{u'ok': 1.0, u'n': 1}
>>> result = bar_coll.find_one()
>>> print result
None
>>>
>>> result = bar_coll.insert_one({"string":"Hello World"})
>>> result = bar_coll.insert_one({"string":"Hello"})
>>> result = bar_coll.delete_one({"string":"Hello World"})
>>> print result
<pymongo.results.DeleteResult object at 0x00000000033EA248>
>>>
下载并安装Mongodb Compass

1.4 Mongodb基本概念
文档:
文档是MongoDB中数据的基本单元,非常类似于关系型数据库管理系统中的行,但更具表现力。
文档是MongoDB的核心概念。文档就是键值对的一个有序集。文档中的值可以是多种不同的数据类型(设置可以是一个完整的内嵌文档)。
文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。键不能含有\0(空字符),这个字符用于表示键的结尾。.和$具有特殊意义,只能在特定环境下使用。通常这两个字符是被保留的,如果使用不当的话,程序会有提示。
MongoDB不但区分类型而且区分大小写,MongoDB的文档不能有重复的键。
集合:
集合就是一组文档。如果将MongoDB中的一个文档比喻为关系型数据库中的一行,那么一个集合就相当于一张表。
集合是动态模式的。这意味着集合里面的文档可以是各式各样的,虽然可以这样搞,但是一般还是会使用多集合把同种类型的文档放在一个集合里。
集合使用名称进行表示,也称为集合命名,集合名可以是满足下列条件的任意UTF-8字符串:
集合名不能是空字符串("")。
集合名不能包含\0字符(空字符),这个字符表示集合名的结束。
集合名不能以"system."开头,这是为系统集合保留的前缀。例如,system.users这个集合保留着数据库的用户信息,而system.namespace集合保存着所有数据库集合的信息。
用户创建的集合不能在集合名中包含保留字符'$'。因为某些系统生成的集合中包含$,除非你要访问支持这种集合的系统,否定不应该在集合名中包含$.
组织集合的一种惯例是使用"."分割不同命名空间的子集合。如blog.posts和blog.authirs,这里的blog集合跟它的自己和没有任何关系,是为了使组织结构更清晰。GridFS(一种用于存储大文件的协议)使用子集合来存储文件的元数据,这样就可以与文件内容块很好的隔离开来。
数据库:
多个文档组成集合,多个集合可以组成数据库。一个MongoDB实例可以承载多个数据库,每个数据库都有独立的权限,即便是在磁盘上,不同的数据库也放置在不同的文件中。在MongoDB服务器上存放多个应用程序或者用户的数据,就需要使用不同的数据库。
数据库通过名称来标识,数据库名可以是满足以下条件的任意UTF-8字符串:
不能是空字符串("")
不得含有/、\、.、"、*、<、>、:、|、?、$(一个空格)、\0(空字符).基本上,只能使用ASCII中的字母和数字。
数据库名区分大小写,即便是在不区分大小写的文件系统中也是如此。简单起见,数据库名应全部小写。
数据库名最多为64字节。
因为数据库最终会变成文件系统里面的文件,而数据库名就是相应的文件名,所以数据库名会有上面的限制。
另外有一些数据库名是保留的,可以直接访问这些有特殊语义的数据库,这些数据库如下所示:
admin : 从身份验证的角度来讲,这是"root"数据库。如果将一个用户添加到admin数据库,这个用户将自动获得所有数据库的权限。一些特定的服务器端命令只能从admin数据库运行,如列出所有数据库或关闭服务器。
local : 这个数据库永远都不可以复制,且一台服务器上的所有本地集合都可以存储在这个数据库中。
config:MongoDB用于分片设置时,分片信息会存储在config数据库中。
把数据库名添加到集合名前,得到集合的完全限定名,即命名空间(namespace)。例如cms数据库中的blog.posts集合,这个集合的命名空间就是cms.blog.posts。命令空间的长度不得超过121字节,且在实际使用中应小于100字节。
1.5 MongoDB的连接
MongoDB shell简介:
MongoDB自带JavaScript shell,可在shell中使用命令行与MongoDB实例交互,也就相当于MongoDB客户端。
# /usr/local/mongodb/bin/mongo #mongo命令就是启动shell,启动时,shell将自动连接MongoDB服务器
> db #启动时,shell会连到MongoDB服务器的test数据库,并将数据库连接赋值给全局变量db。
> show databases; #查看数据库,当然> show dbs 才是正确写法
> use testdb #切换到testdb数据库,如果testdb数据库不存在则创建,> db.dropDatabase() #这是删除当前数据库操作

# /usr/local/mongodb/bin/mongo mongodb://192.168.1.108:27017 #这样可以连接远程192.168.1.108的mongodb数据库
# /usr/local/mongodb/bin/mongo mongodb://192.168.1.108:27017/testdb #当然更多的是直接连接某个数据库,我这里是直接连接testdb库
# /usr/local/mongodb/bin/mongo --nodb #当然也可以用--nodb默认先不连接任何数据库,下面是进入shell之后的操作
> conn = new Mongo("192.168.1.108:27017") #连接哪个IP的mongodb
connection to 192.168.1.108:27017
> db = conn.getDB("testdb") #连接哪个数据库
testdb
创建一条集合:
> post = {"title" : "The one test", #这里是创建一个文档,变量名是post。
... "content" : "One post",
... "date" : new Date()}
{ #这里是输出信息
"title" : "The one test",
"content" : "One post",
"date" : ISODate("2017-08-06T13:51:58.916Z")
}
> db.blog.insert(post) #将此文档插入到blog集合中
> db.blog.find() #调用find方法查看所有的集合,下面是输出结果
{ "_id" : ObjectId("59871f16e17e3fb9a59e60ca"), "title" : "The one test", "content" : "One post", "date" : ISODate("2017-08-06T13:51:58.916Z") }
_id和ObjectID:
MongoDB中存储的文档必须有一个“_id”键。这个键的值可以是任何类型的,默认是个ObjectID对象。在一个集合里面,每个文档都有唯一的“_id”,确保集合里面每个文档都能被唯一标识,每个集合里面每个文档的"_id"值是唯一的。
mongodb采用了一个称之为ObjectId的类型来做主键。ObjectId是一个12字节的 BSON 类型字符串。按照字节顺序,依次代表:
4字节:UNIX时间戳 ,可以提供秒级别的唯一性。
3字节:是所在主机的唯一标识符,通常是机器主机名的散列值。
2字节:产生ObjectId的PID,确保同一台机器上并发产生的ObjectId是唯一的。前九位保证了同一秒钟不同机器的不同进程产生的ObjectId时唯一的。
3字节:自增计数器,确保相同进程同一秒钟产生的ObjectId是唯一的。
如果插入文档时没有“_id”键,系统会自动帮助创建一个,通常会在客户端由驱动程序完成。将工作交由客户端来处理,减轻数据库扩展的负担。
1.6 Mongodb数据类型
| 数据类型 | 描述 |
| String | 字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。 |
| Integer | 整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。 |
| Boolean | 布尔值。用于存储布尔值(真/假)。 |
| Double | 双精度浮点值。用于存储浮点值。 |
| Min/Max keys | 将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。 |
| Arrays | 用于将数组或列表或多个值存储为一个键。 |
| Timestamp | 时间戳。记录文档修改或添加的具体时间。 |
| Object | 用于内嵌文档。 |
| Null | 用于创建空值。 |
| Symbol | 符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。 |
| Date | 日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。 |
| Object ID | 对象 ID。用于创建文档的 ID。 |
| Binary Data | 二进制数据。用于存储二进制数据。 |
| Code | 代码类型。用于在文档中存储 JavaScript 代码。 |
| Regular | 正则表达式类型。用于存储正则表达式。 |
二、MongoDB的命令参数和内置帮助文档
2.1 mongod参数
# /usr/local/mongodb/bin/mongod --help
选项:
一般选项:
-h [ --help ] #显示此使用信息
--version #显示版本信息
-f [ --config ] arg #配置文件指定,其他的一些选项
-v [ --verbose ] [=arg(=v)] #更详细(包括更多冗长的多次,例如-vvvvv)
--quiet #更安静的输出
--port arg #指定端口号 - 27017默认
--bind_ip arg #以逗号分隔的ip地址列表,默认为所有本地ip
--ipv6 #启用IPv6支持(默认情况下禁用)
--maxConns arg #最大同时连接数 - 默认为1000000
--logpath arg #日志文件发送写入而不是stdout - 必须是一个文件,而不是目录
--syslog #登录系统的syslog工具,而不是文件或stdout
--syslogFacility arg #syslog工具用于mongodb syslog消息
--logappend #附加到日志路径而不是覆盖
--logRotate arg #设置日志旋转行为(rename重命名|reopen重新打开)
--timeStampFormat arg #日志消息中期望时间戳的格式。 一个ctime,iso8601-utc或iso8601-local
--pidfilepath arg #pidfile的完整路径(如果未设置,则不创建pidfile)
--keyFile arg #用于集群身份验证的私钥
--noauth #运行无安全
--setParameter arg #设置可配置参数
--httpinterface #启用http界面
--transitionToAuth #用于滚动访问控制升级.尝试通过传出连接进行身份验证,无论成功如何。接受有或没有认证的传入连接。
--clusterAuthMode arg #用于集群认证的认证模式.替代方法是(keyFile|sendKeyFile|sendX509|x509)
--nounixsocket #禁用监听unix套接字
--unixSocketPrefix arg #UNIX域套接字的备用目录(默认为/tmp)
--filePermissions arg #默认情况下,在UNIX域套接字文件-0700上设置权限
--fork #fork服务器进程
--networkMessageCompressors arg #用于网络消息的压缩器的逗号分隔列表
--auth #运行安全
--jsonp #允许通过http访问JSONP(具有安全隐患)
--rest #
--slowms arg (=100) #配置文件和控制台日志的缓慢值
--profile arg # 0=off 1=slow, 2=all
--cpu #定期显示cpu和iowait的利用率
--sysinfo #打印一些诊断系统信息
--noIndexBuildRetry #不要重试任何被关闭中断的索引构建
--noscripting #禁用脚本引擎
--notablescan #不允许表扫描
--shutdown #杀死正在运行的服务器(对于init脚本)
复制选项:
--oplogSize arg #要用于复制操作日志的大小(以MB为单位).默认为磁盘空间的5%(即arge是好的)
主/从选项:
--master #主模式
--slave #从模式
--source arg #当为slave:指定master为<server:port>
--only arg #当为slave:指定要复制的单个数据库
--slavedelay arg #指定将主操作应用于从站时使用的延迟(以秒为单位)
--autoresync #如果从站数据不稳定,则自动重新同步
副本集选项:
--replSet arg # arg is <setname>[/<optionalseedhostlist>]
--replIndexPrefetch arg #指定索引预取行为(如果辅助)[none | _id_only | all]
--enableMajorityReadConcern #支持多数的readConcern
分片选项:
--configsvr #声明这是一个集群的配置数据库; 默认端口27019; 默认dir /data/configdb
--shardsvr #声明这是一个簇的碎片db; 默认端口27018
存储选项:
--storageEngine arg #使用什么存储引擎 - 如果没有数据文件,则默认为wiredTiger
--dbpath arg #datafile的目录 - 默认为/data/db
--directoryperdb #每个数据库将存储在单独的目录中
--noprealloc #禁用数据文件预分配 - 经常会伤害性能
--nssize arg (=16) #.ns文件大小(以MB为单位)用于新数据库
--quota #将每个数据库限制为一定数量的文件(8个默认值)
--quotaFiles arg #每个db允许的文件数
--smallfiles #使用较小的默认文件大小
--syncdelay arg (=60) #磁盘同步之间的秒数(0=从不,但不推荐)
--upgrade #如果需要升级db
--repair #在所有的dbs上运行修复
--repairpath arg #修复文件的根目录 - 默认为dbpath
--journal #启用日志记录
--nojournal #禁用日记功能(日志记录默认为64位)
--journalOptions arg #日志诊断选项
--journalCommitInterval arg #分组/批次提交的频率(ms)
WiredTiger选项:
--wiredTigerCacheSizeGB arg #为缓存分配的最大内存量; 默认为物理RAM的1/2
--wiredTigerStatisticsLogDelaySecs arg (=0) #秒之间等待每次写入dbpath中的统计文件; 0表示不记录统计信息
--wiredTigerJournalCompressor arg (=snappy) #使用压缩器进行日志记录[none | snappy | zlib]
--wiredTigerDirectoryForIndexes #将索引和数据放在不同的目录中
--wiredTigerCollectionBlockCompressor arg (=snappy) #收集数据的块压缩算法[none | snappy | zlib]
--wiredTigerIndexPrefixCompression arg (=1) #在行存储页面上使用前缀压缩
#当然mongodb是支持配置文件的,可以将参数定义在config文件中然后通过-f指定配置文件启动。
#mongodb可以通过-f指定配置文件启动的。配置文件参数详解官网地址:https://docs.mongodb.com/manual/reference/configuration-options/
2.2 mongo参数
# /usr/local/mongodb/bin/mongo -h
选项:
--shell #执行文件后运行shell
--nodb #启动时不要连接到mongodb
--norc #启动时不会运行“.mongorc.js”文件
--quiet #简单输出模式
--port arg #要连接的端口
--host arg #服务器连接
--eval arg #要执行的javascript
-h [ --help ] #显示此使用信息
--version #显示版本信息
--verbose #增加详细程度
--ipv6 #启用IPv6支持(默认情况下禁用)
--disableJavaScriptJIT #禁用JavaScript即时编译器
--disableJavaScriptProtection #允许自动的JavaScript函数编组
--networkMessageCompressors arg #用于网络消息的压缩器的逗号分隔列表
--jsHeapLimitMB arg #设置js范围的堆大小限制
验证选项:
-u [ --username ] arg #认证用户名
-p [ --password ] arg #认证密码
--authenticationDatabase arg #用户来源(默认为dbname)
--authenticationMechanism arg #认证机制
--gssapiServiceName arg (=mongodb) #使用GSSAPI Kerberos进行身份验证时使用的服务名称
--gssapiHostName arg #用于GSSAPI/Kerberos身份验证的远程主机名
官网链接:https://docs.mongodb.com/manual/reference/connection-string/
另外mongodb的词汇表:https://docs.mongodb.com/manual/reference/glossary/

浙公网安备 33010602011771号