MongoDB的基本配置与操作
2016-09-22 11:06
399 查看
mongo是用c++编写的开源跨平台分布式非关系文档数据库,其可存储海量数据,主要用于查询操作。非关系nosql数据库主要有四大类,键值型数据库,如memcachedb、redis;列数据库,如hbase;文档型数据库,如mongo;图形数据库。通常在数据量很大,且需要不断扩容;要求读写速度非常快;需求会经常变更,导致数据模型无法确定;系统要求相当高的可用性的情况下会考虑使用mongo。
mongod.conf文件用于设置mongo服务启动时的配置信息。
port:指定服务端口,默认27017。
dbpath:指定数据库文件存放目录,必须先创建目录,如/…/mongo/db。
logpath:指定数据库日志文件存放目录与文件名,必须先创建目录和文件,如/…/mongo/mongod_27017.log。
fork:指定服务是否为后台运行,默认非后台运行。
bind_ip:绑定服务实例只接受来自指定ip的请求,默认可接收任意ip的请求。
auth:指定服务是否以认证的方式启动,前提是必须在admin数据库中创建超级用户,默认不认证。
journal:开启日志功能,默认开启。
logappend:错误日志采用追加模式,默认为覆盖。
=======================================
=======================================
文档为核心,等同于关系数据库中的记录,数据结构类似json格式,由一对大括号以及之间的多个键值对构成。键不可重复,必须是字符串,在双引号之间,不能有空字符
集合由多个文档构成,等同于关系数据库的表,无固定模式,可存放任意格式文档。业务上使用集合来管理文档,结构更加清晰,且实际中通常同一个集合中存放相同模式的文档。集合的命名使用字符串,不能有空串,不能有\0空字符,不能以system开头,不能有$字符,可以使用类似java的包名,用点间隔。
数据库由多个集合构成,一个服务实例可有多个相互完全独立的数据库,每个数据库都对应硬盘上一个不同的文件。数据库的命名使用字符串,要求同上,全部用小写。数据库对应硬盘的文件,其名字也最终会转为硬盘上的文件名,由此命名时应该注意兼容系统。
=======================================
操作mongo前必须先进入某个数据库,然后在该库下执行命令,默认在test库下,初始所有数据库为空。若要以认证auth=true的方式启动服务,必须要在数据库中创建用户,才能使认证功能生效。
=======================================
mongo自带客户端访问其服务,该工具内置javascript解释器,可解释运行脚本语句和函数,其提供的全局变量db对象封装了对数据库操作的各种函数。
mongod.conf文件用于设置mongo服务启动时的配置信息。
port:指定服务端口,默认27017。
dbpath:指定数据库文件存放目录,必须先创建目录,如/…/mongo/db。
logpath:指定数据库日志文件存放目录与文件名,必须先创建目录和文件,如/…/mongo/mongod_27017.log。
fork:指定服务是否为后台运行,默认非后台运行。
bind_ip:绑定服务实例只接受来自指定ip的请求,默认可接收任意ip的请求。
auth:指定服务是否以认证的方式启动,前提是必须在admin数据库中创建超级用户,默认不认证。
journal:开启日志功能,默认开启。
logappend:错误日志采用追加模式,默认为覆盖。
=======================================
// 解压安装包到当前目录 tar xzf xxx.tgz // 在etc/rc.local文件内添加如下字符串,使mongo服务随着linux的启动而开机自启 /安装目录/mongo-x.x.x/bin/mongod --config ../mongo_27017.conf // 在解压目录下执行,启动服务 bin/mongod --config mongod_27017.conf // 启动客户端连接服务,为自带的javascript shell命令接口,可使用可视化的客户端工具,如sqlyog bin/mongo // 进入admin数据库 use admin // 发送消息关闭与其连接的服务 db.shutdownServer()
=======================================
文档为核心,等同于关系数据库中的记录,数据结构类似json格式,由一对大括号以及之间的多个键值对构成。键不可重复,必须是字符串,在双引号之间,不能有空字符
\0,不能用
.或$,不能以
_开头。值可以是任意类型,严格区分类型与大小写,且键值有序。
集合由多个文档构成,等同于关系数据库的表,无固定模式,可存放任意格式文档。业务上使用集合来管理文档,结构更加清晰,且实际中通常同一个集合中存放相同模式的文档。集合的命名使用字符串,不能有空串,不能有\0空字符,不能以system开头,不能有$字符,可以使用类似java的包名,用点间隔。
数据库由多个集合构成,一个服务实例可有多个相互完全独立的数据库,每个数据库都对应硬盘上一个不同的文件。数据库的命名使用字符串,要求同上,全部用小写。数据库对应硬盘的文件,其名字也最终会转为硬盘上的文件名,由此命名时应该注意兼容系统。
=======================================
操作mongo前必须先进入某个数据库,然后在该库下执行命令,默认在test库下,初始所有数据库为空。若要以认证auth=true的方式启动服务,必须要在数据库中创建用户,才能使认证功能生效。
// 创建超级用户 // 先将mongod.conf中auth=true注释掉,以非认证的方式启动服务 // 切换到admin数据库 use admin // 用户的信息位于其被指定的数据库的system.users集合中,创建超级用户 db.createUser ( { // 用户名 user: "lt", // 用户密码 pwd: "123", // 用户描述信息,可有可无 customData: {any info} // 为用户分配角色,值为数组[],数组中一对{}就是一个角色,一个用户可分配多个角色 // 角色有内置的,也有自定义的,db指定该用户的该角色对哪个数据库起效 roles: [{role: "root", db: "admin"}, {....}, ....] } ) // 内置角色 // 数据库操作角色 // 允许用户读取指定的数据库 read // 允许用户读写指定的数据库 readWrite // 数据库管理角色 // 允许用户对指定的数据库进行管理操作 doAdmin // 允许用户对指定数据库的system.users集合进行操作 userAdmin // 仅适用于admin数据库的角色 // 允许用户对服务中的所有数据库进行读操作 readAnyDatabase // 允许用户对服务中的所有数据库进行读写操作 readWriteAnyDatabase // 赋予用户对服务中所有数据库的userAdmin权限 userAdminAnyDatabase // 赋予用户对服务中所有数据库的dbAdmin权限 dbAdminAnyDatabase // 超级用户 root
// 创建其它用户 // 输出当前的所有进程,并查找mongod关键字 ps -ef | grep mongod // 查找出服务进程id后,杀死进程 kill -2 pid // 将mongod.conf中对auth=true的注释取消,以认证的方式启动服务 // 切换到admin数据库 use admin // 使用超级用户认证登录 db.auth("lt", "123") // 切换到test数据库 use test // 为test数据库创建一个读写用户 db.createUser ( { user: "test-lt", pwd: "123", roles: [{role: "readWrite", db: "test"}] } ) // 使用刚创建的账号认证登录 db.auth("test-lt", "123")
=======================================
mongo自带客户端访问其服务,该工具内置javascript解释器,可解释运行脚本语句和函数,其提供的全局变量db对象封装了对数据库操作的各种函数。
// 查看当前服务中的所有数据库 show dbs // 切换到指定数据库,默认连接到test数据库 // 若数据库不存在,则创建数据库,并切换到该数据库 // 连接到数据库后,连接对象会被赋值给db,之后通过db的函数来操作数据库 use dbname // 查看服务实例所在服务器的ip地址 db.getMongo() // 查看当前数据库,直接db也可以 db.getName() // 查看当前数据库状态 db.stats() //查 看当前mongo服务的版本 db.version() // 查看当前数据库中的所有集合 show collections // 删除当前数据库中的xx集合,将当前数据库中的全部集合删除就等同于删除数据库 db.xx.drop() // 插入 // 创建文档doc,并初始化,key会自动加双引号,文档创建后必须插入集合才会生效 doc={name: "lt", pwd: "123", sex: "man", age: 29} // 将文档doc插入集合user,若集合user不存在,自动创建 // 系统自动为新插入集合的文档添加key为_id的键值对,用于唯一标识该文档 db.user.insert(doc) // 先遍历集合,查看文档doc是否存在,若存在执行更新,不存在执行插入 db.user.save(doc) // 用js脚本一次插入多个文档 for(var i = 0; i < 10; i++) { var doc = {name: "lt" + i, pwd: i, sex: "man", age: 29 + i}; db.user.insert(doc); } // 修改 // 将user集合内name为lt的文档的对应键值改为ltnew db.user.update({name: "lt"}, {$set, {name: "ltnew"}}); // 删除 // 将user集合内name为ltnew的文档删除 db.user.remove({name: "ltnew"}); // 删除集合内所有文档 db.user.remove({}); // 查询 // 查看集合内的所有文档,一次最多只显示20个,输入it,可显示下一页的数据 db.user.find() // 直接遍历,一次性显示所有的文档 db.user.find().forEach(printjson); // 按条件查询,返回name为xx的文档 db.user.find({name: "xx"}).forEach(printjson); // 按条件查询,返回name为xx的文档,{name: 1}表示仅返回name字段,{name: 0}表示返回除name意外的全部字段 db.user.find({name: "xx"}, {name: 1}).forEach(printjson); // 返回所有文档,但仅返回name字段 db.user.find({}, {name: 1}).forEach(printjson); // 仅返回符合条件的第一条数据 printjson(db.user.findOne({条件})); // 仅返回符合条件的前3条数据 db.user.find({条件}).limit(3); // 用js脚本来查看数据,用游标操作 var cursor = db.user.find(); while(cursor.hasNext()) { printjson(cursor.next()); } // 用数组操作 var cursor = db.user.find().toArray(); for(var i = 0; i < cursor.length(); i++) { printjson(cursor[i]); }
相关文章推荐
- Mongodb集群搭建的三种方式
- mongodb 学习笔记
- python实现爬虫数据存到 MongoDB
- MongoDB日期类型
- python实现爬虫数据存到 MongoDB
- Spring data mongodb实现LBS
- MongoDB的安装(报10061错误)
- mongodb副本集实践
- MongoDB学习笔记:(3)、mongodb 3.2在java环境中的简单CRUD
- java操作Mongodb,Spring-data-mongo简单配置
- MongoDB的使用学习之(七)MongoDB的聚合查询(spring-data-mongodb两种方式)附项目源码
- 关于Spring-Data-Mongodb中的project()的用法,和previousOperation()的用法
- spark streaming+mongodb(geo)
- spring data mongodb学习以及为repository提供可扩展的自定义方法
- [学习笔记] - Ubuntu 下安装MongoDB
- mongodb 优化索引心得
- mongodb的查询语句学习摘要
- liunx环境中php添加mongodb扩展
- mongoDB初识
- mongodb sharding配置