对比项 | mongoDB | mysql |
---|---|---|
表 | 集合(Collection ) | table |
表的一行数据 | 文档Document | 一条记录record |
表字段 | 键 key | 字段 field |
字段值 | 值 value | 值value |
主外键 | 无 | pk,fk |
灵活度扩展性 | 极高 | 差 |
- document :文档是一组键值(key-value)对(即 BSON)。
- collections :集合就是 MongoDB 文档组,集合存在于数据库中。
- database:数据库。
-
MongDB区分大小写和区分类型
{"Foo":3} 和 {"foo":3} //不是相同的 {"foo":3} 和 {"foo":"3"} //不是相同的
-
文档键命名规范
- 键不能含有
\0
(空字符)。这个字符用来表示键的结尾。 .
和$
有特别的意义,只有在特定环境下才能使用。- 以下划线"_"开头的键是保留的(不是严格要求的)。
- 键不能含有
这个数据库就是 “ root ” 数据库。如果将一个用户添加到admin数据库,这个用户将自动获取所有数据库的权限。一些特定的服务器端命令也是只能从admin数据运行,列出所有数据库或者关闭服务器。
这个数据库永远不可以复制,且一台服务器的所有本地集合都可以存储在这个数据中。可以用来存储限于本地单台服务器的任意集合。
MongoDB用于分片设置时。
- mongodb 在没有参数的情况下会使用默认的数据目录
/data/db
。如果数据目录不存在或者不可写,服务器会启动失败。因此 MongoDB 启动前,先创建数据目录,以确保对该目录有写权限。 - 启动时,服务器会打印版本和系统信息,然后等待连接。默认情况下,MongoDB监听27017端口。
mongod --help 查看启动详细参数
mongodb的参数说明:
--dbpath 数据库路径(数据文件)
--logpath 日志文件路径
--master 指定为主机器
--slave 指定为从机器
--source 指定主机器的IP地址
--pologSize 指定日志文件大小不超过64M.因为resync是非常操作量大且耗时,最好通过设置一个足够大的oplogSize来避免resync(默认的 oplog大小是空闲磁盘大小的5%)。
--logappend 日志文件末尾添加
--port 启用端口号 默认 27017 端口
--fork 在后台运行
--only 指定只复制哪一个数据库
--slavedelay 指从复制检测的时间间隔
--auth 是否需要验证权限登录(用户名和密码)
另外备注 :上述配置可以配置到文件中。
./mongodb/mongodb/bin/mongod --dbpath ./mongodb/data/ --logpath ./mongodb/logs/run.log --fork
默认是用test用户启动mongodb客户端 , 使用超级管理员启动 `mongo 127.0.0.1/admin
#安全停止使用管理员数据库
use admin;
db.shutdownServer();
-
String:字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。
-
null 用来表示空值或者不存在的字段
{"key":null}
-
Boolean 有两个值 true 和 false
{"key":true}
-
正则表达式: 查询时,使用正则表达式作为限定条件,语法也与 Javascript 的正则表达式相同。用于存储正则表达式。
{"key":/foobar/i}
-
数组
{"key":["a","b","c"]
-
内嵌文档 : 文档可嵌套其他文档,被嵌套的文档作为父文档的值
{"key":{"foo":"bar"}}
-
对象id : 是文档的唯一标识
MongoDB中存储的文档必须有一个
_id
键。这个键的值可以是任何类型的,默认是个ObjectId对象。在一个集合里面,每个文档都有一个唯一的_id
{ "_id" : ObjectId("5b378afa8f979b000c259dba")}
-
二进制数据(Binary Data)
二进制数据是一个任意字节的字符串。它不能直接在shell中使用。如果要将非UTF-8字符保存到数据库中,二进制数据是唯一的方式。
-
Code:代码类型。用于在文档中存储 JavaScript 代码。
# 进入admin数据库
mongo 127.0.0.1/admin
#启动 mongo shell 时不连接到任何 mongodb 的方式连接到数据库
mongo --nodb #此时没有连接任何数据库
conn = new Mongo("127.0.0.1:27017");
db = conn.getDB("admin"); #执行完这条命令就可以正常操作shell
-
在本地执行 js 脚本
//mongo shell 会依次执行传入的脚本 mongo D:/MongoDB3.6/1.js D:/MongoDB3.6/2.js
-
在远程执行 js 脚本
//前提是能连接上 mongo --quiet server-1:30000/foo scrip t1.js
-
可以使用 load() 函数,从交互式 shell 中运行脚本。填写路径的时候尽量填写绝对路径,注意 load() 函数无法理解
~
这个代表家目录的符号。> load("D:/MongoDB3.6/1.js") dddd true
-
shell 中辅助函数对应的 javascript 函数
shell 中 js 中 use foo db.getSisterDB('foo') show dbs db.getMongo().getDBs() show collections db.getCollectonNames()
use admin
db.adminCommand({logRotate: 1})
ps -ef | grep mongodb #获取mongodb的运行ID
kill -SIGUSR1 2200
-
数据库级别的几个函数 (db.help())
db.hostInfo(); //get details about the server's host db.isMaster(); //check replica primary status db.version(); //current version of the server db.stats(); //查看当前数据库的信息 db.logout()
-
集合级别的帮助 ( db.collections.help())
-
如果想知道一个函数是做什么用的。可以直接查看源码如何是实现的。
db.users.update + tab键
-
查看帮助列表
help()
-
集合帮助列表
db.<collection>.help()
,例如db.index.help()
。 -
游标帮助列表。
db.<collection>.find().help()
,例如db.index.find().help()
。
当启动的时候,mongo检查用户HOME目录下的一个JavaScript文件.mongorc.js。如果找到,mongo在首次显示提示信息前解析.mongorc.js的内容。如果你使用shell执行一个JavaScript文件或计算表达式,要么通过在命令行使用--eval选项或者指定一个.js文件给mongo,mongo会在完成JavaScript的处理后读取.mongorc.js文件。你可以使用--norc选项来阻止加载.mongorc.js。
-
如果某些脚本会被频繁加载,可以将它们添加到
.mongorc.js
文件中。这个文件会在启动shell时自动运行。- windows 中位于
C:/Administrator/.mongorc.js
- linux 中位于 对应的家目录。
- windows 中位于
-
可以使用这个脚本创建一些自己需要的全局变量,或者是为太长的名字创建一个简短的别名,也可以重写内置的函数。
.mongorc.js
最长见的用途之一就是移除那些比较危险的 shell 辅助函数。可以在这里重写这些方法//自定义提示内容 var no = function(){ print("Not on my watch"); }; //禁止删除数据库 db.dropDatabase = DB.prototype.dropDatabase = no; //禁止删除集合 DBCollection.prototype.drop = no; //禁止删除索引 DBCollection.prototype.dropIndex = no;
//命令行中根据 ObjectId 获取时间戳
ObjectId("5c8f874fb08d0d6c161b51a3").getTimestamp();
//获取 ObjectId 字符串
ObjectId().str
// getSiblingDB() 相当于 use <database>
db = db.getSiblingDB('users')
db.active.count()
-
EDITOR变量配置分为两步:
-
在系统环境变量中[这里建议使用用户目录下的.bashrc文件]添加一个EDITOR变量,变量的值为vim编辑器的路径,默认为/usr/bin/vim,其格式为:
EDITOR=/usr/bin/vim
。(source ~/.bashrc 使得环境变量生效)。 -
在当前的用户目录下新建一个.mongorc.js文件,并为其添添加vim的路径。其格式:
EDITOR="/usr/bin/vim"
。这是就可以启动mongo,然后在MongoDB Shell中,直接输入edit 变量名,来编辑相应的变量。
-
-
配置显示的数据条数
# mognodb 命令行默认显示20行,可以改变一次显示的条数 DBQuery.shellBatchSize = 10;
-
配置提示信息
//第一种 prompt = function() { return"Uptime:"+db.serverStatus().uptime+"Documents:"+db.stats().objects+" > "; } //提示信息就变成 Uptime:3331 Documents:0 > //第二种 //带有行信息的提示 cmdCount = 1; prompt = function() { return (cmdCount++) + "> "; }
-
MongoDB默认记录耗时超过100毫秒的查询信息。
level有三种级别 0 – 不开启 1 – 记录慢命令 (默认为>100ms) 2 – 记录所有命令 参数为1的时候,默认的慢命令是大于100ms,当然也可以进行设置 db.setProfilingLevel( level , slowms ) 实例 db.setProfilingLevel( 1 , 120 ); db.getProfilingStatus();
MongoDB 固定集合(Capped Collections)是性能出色且有着固定大小的集合,对于大小固定,我们可以想象其就像一个环形队列,当集合空间用完后,再插入的元素就会覆盖最初始的头部的元素!
- 储存日志信息。
- 缓存一些少量的文档。
-
通过createCollection来创建一个固定集合,且capped选项设置为true:
db.createCollection("cappedLogCollection",{capped:true,size:10000})
-
还可以指定文档个数,加上max:1000属性:
db.createCollection("cappedLogCollection",{capped:true,size:10000,max:1000})
-
判断集合是否为固定集合:
db.cappedLogCollection.isCapped()
-
如果需要将已存在的集合转换为固定集合可以使用以下命令:
db.runCommand({"convertToCapped":"posts",size:10000})
-
固定集合文档按照插入顺序储存的,默认情况下查询就是按照插入顺序返回的,也可以使用$natural调整返回顺序。
db.cappedLogCollection.find().sort({$natural:-1})