正常安装
- 下载软件, 在MongoDB官网 下载安装包mongodb-win32-x86_64-2008plus-ssl-3.4.3-signed
- 下载完成后开始安装,我修改了安装位置,放在了目录“C:\mongodb”下面
- 一路next安装完成。接下来是最有问题的设置MongoDB的服务。
- 在目录“C:\mongodb”下创建data目录和logs目录,并在logs目录下创建文件mongodb.log
- 在目录“C:\mongodb”下创建mongodb.conf,并填入配置信息:
dbpath=C:\mongodb\data
logpath=C:\mongodb\logs\mongo.log
logappend=true
journal=true
quiet=true
port=27017
- 启动cmd界面,并执行以下命令:
cd C:\mongodb\bin
mongod --config "C:\mongodb\mongo.conf" --logpath "C:\mongodb\logs\mongo.log" --install --serviceName "MongoDB"
mongod.exe --remove --serviceName "MongoDB" #如果需要移除这个服务的话
-
浏览器访问http://127.0.0.1:27017即可看到以下界面
权限配置
MonogoDB默认是无需权限认证即可进行CRUD操作的,但是为了保证MongoDB的使用尤其是商业使用,MongoDB应该要求是做权限配置。
关于权限,需要理解:
- MongoDB是没有默认管理员账号,所以要先添加管理员账号,再开启权限认证。
- 切换到admin数据库,添加的账号才是管理员账号。
- 用户只能在用户所在数据库登录,包括管理员账号。
- 管理员可以管理所有数据库,但是不能直接管理其他数据库,要先在admin数据库认证后才可以。
MongoDB有默认的角色参考官方文档,也可以自定义角色,默认的角色包括:
- Read:允许用户读取指定数据库
- readWrite:允许用户读写指定数据库
- dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
- userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
- clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
- readAnyDatabase:赋予用户所有数据库的读权限
- readWriteAnyDatabase:赋予用户所有数据库的读写权限
- userAdminAnyDatabase:赋予用户所有数据库的userAdmin权限
- dbAdminAnyDatabase:赋予用户所有数据库的dbAdmin权限。
- root:超级账号,超级权限
- __system权限 ,用于分布式环境的权限认证,MongoDB assigns this role to user objects that represent cluster members, such as replica set members and mongos instances. The role entitles its holder to take any action against any object in the database.Do not assign this role to user objects representing applications or human administrators, other than in exceptional circumstances.If you need access to all actions on all resources, for example to run applyOps commands, do not assign this role. Instead, create a user-defined role that grants anyAction on anyResource and ensure that only the users who need access to these operations have this access.
上述的配置完成后,可以按照下面的操作进行:
- 查看admin库
C:\Users\kejun.he>mongo
> use admin
switched to db admin
> show collections
system.version
- 添加超级权限用户sa,root用户和admin用户
> db.createUser(
{
user:"sa",
pwd:"root",
roles:["root"]
})
> db.createUser(
{
user:"root",
pwd:"root",
roles:["clusterAdmin", "readWriteAnyDatabase", "dbAdminAnyDatabase", "userAdminAnyDatabase"]
})
> db.createUser(
{
user:"admin",
pwd:"admin",
roles:[{role:"dbAdminAnyDatabase",db:"admin"}]
})
- 在我们之前配置的mongo.conf文件中增加这一句,并重启mongoDB服务
auth=true
========================
net stop mongoDB
net start mongoDB
我们再重新登录,发现需要认证的配置生效了,这时候需要通过认证登录:
C:\Users\kejun.he>mongo
MongoDB shell version v3.4.3
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.3
> show dbs
2017-04-25T13:04:34.435+0800 E QUERY [thread1] Error: listDatabases failed:{
"ok" : 0,
"errmsg" : "not authorized on admin to execute command { listDatabases:
1.0 }",
"code" : 13,
"codeName" : "Unauthorized"
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1
shellHelper.show@src/mongo/shell/utils.js:761:19
shellHelper@src/mongo/shell/utils.js:651:15
@(shellhelp2):1:1
在上面的代码中,我们可看到需要检查admin的权限,use admin之后不能直接查询,通过权限认证之后才能查看admin数据库下的表。
* 继续增加普通用户,方便用户访问特定的数据库
> use admin
> db.auth("admin","admin")
> use upwords
switched to db upwords
> db.createUser({
user:"up",
pwd:"up",
roles:[{role:"readWrite",db:"upwords"},{role:"dbAdmin",db:"upwords"}]
})
Successfully added user: {
"user" : "up",
"roles" : [
{
"role" : "readWrite",
"db" : "upwords"
},
{
"role" : "dbAdmin",
"db" : "upwords"
}
]
}
> use upwords
switched to db upwords
> db.auth("up","up")
1
> show collections
abc
test
显示添加成功。
概念
NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL"。
-
RDBMS vs NoSQL
RDBMS- 高度组织化结构化数据
- 结构化查询语言(SQL) (SQL)
- 数据和关系都存储在单独的表中。
- 数据操纵语言,数据定义语言
- 严格的一致性
- 基础事务
NoSQL
- 代表着不仅仅是SQL
- 没有声明性查询语言
- 没有预定义的模式
- 键 - 值对存储,列存储,文档存储,图形数据库
- 最终一致性,而非ACID属性
- 非结构化和不可预知的数据
- CAP定理
- 高性能,高可用性和可伸缩性
-
NoSQL的优点/缺点
优点:- 高可扩展性
- 分布式计算
- 低成本
- 架构的灵活性,半结构化数据
- 没有复杂的关系
缺点:
- 没有标准化
- 有限的查询功能(到目前为止)
- 最终一致是不直观的程序
-
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。主要特点包括:
- MongoDB的提供了一个面向文档存储,操作起来比较简单和容易。
- 你可以在MongoDB记录中设置任何属性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")来实现更快的排序。
- Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
- MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。
- Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。
- Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理。
- Map函数和Reduce函数是使用Javascript编写的,并可以通过db.runCommand或mapreduce命令来执行MapReduce操作。
- GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。
- MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。
- MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
MongoDB中,数据库db=database,数据库表table=collection,数据记录行row=document,数据集字段column=field,索引index=index,自动将_id字段设为主键,没有join操作。文档是一组键值对,MongoDB的文档不需要设置字段和字段类型,键值对是有序的,MongoDB不能有重复的键,文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。
-
MongoDB中需要保留三个数据库名,它们是安装好创建并支持直接访问:
- admin: 从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
- local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合。
- config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。
默认创建collections和db的方法
使用use db_name默认创建数据仓库db_name,然后通过db.collection_name.insert(document)可以默认创建collection