学习mongo一段时间了,因为是平时用不到,所以学点东西总是不断忘记,现在记下来,方便以后查看。
参看资料<<MongoDB_权威指南_中文版>>,<<深入学习mongodb>>以及一些其他资料
其他介绍就不必,直接从使用入手吧,因为网上的安装mongdb的例子很多这里就不在重复了
(一)mongodb工具的大概介绍
安装完mongod后会在bin目录下有如下文件(window下会以.exe结尾):
bsondump:将bjson文档转化为json文档
mongo:mongodb的客户端,就是一个js解释器,可以执行大多js语言和查询mongodb数据库,后面会经常用到
mongodb:mongodb的服务端,每个实例启动一个进程
mongodump/mongorestore:mongodb备份和恢复的工具
mongoexport/mongoimport:mongodb的导出和导入文件
mongofiles:Gridfs管理工具,可以实现二进制文件存取和分片等功能
mongos:主要是用于mongodb分片中,用于当做分片集群的统一接口(路由)
mongosniff/mongostate:是mongodb的网路监控和mongodb性能监控,很有用
(二)启动和关闭mongodb数据库
mongodb和mysql一样可以在启动时代很多参数也可以在启动时使用配置文件,如果配置文件和参数中有冲突的,请以参数配置为准。
(1)启动mongodb数据库:
方法1:执行命令加参数
mongod --dbpath=/data/db/ --logpath=/data/logs/mongo.log --port=10000 --bind_ip=127.0.0.1 --directoryperdb --fork
参数说明:dbpath是数据库数据存放路径,如果路径不存在会报错的
logpath是数据日志存放的路径包括文件名,路径必须存在,文件可以不存在
这上面两个两个参数是必须的:
directoryperdb:每个单独的数据库存放在单独的文件夹内,维护很方便
mongodb默认启动了很多参数,其中下面是几个比较重要的
dbpath:默认是/data/db
bind_ip:默认是自己主机
port:默认是27017
fork:是服务器再后天运行,而不是在终端,可以理解为c语言的fork函数,个人感觉具体实现应该和守护进程差不过吧。
方法2:使用配置文件启动
使用配置文件维护方便,而且启动了什么查看配置即可,如果启动多个服务器实例有点更明显,例如以后的副本集和分片如果用配置
mongod -f /etc/mongo/mongdb.cnf
-f是说明mongdb使用配置,后面跟配置文件的路径及配置文件名,名字可以随便取
和上一个一样配置的配置文件格式如下mongdb.cnf:
dbpath:/data/db/
logpath:/data/logs/mongo.log
port:10000
bind_ip:127.0.0.1
directoryperdb:true
(2)关闭mongd服务器
1. 如果服务器是使用前台开启的,可以直接使用ctril+c关掉服务器
2. 可以使用pgrep mongod查看PID大小,然后使用kill 2 *****(不要用kill -9 PID来杀死MongoDB进程,这样可以会导致MongoDB的数据损坏)
3. 可以在客户端使用命令:db.shutdownServer()来关闭服务器
提示:在如果没有开启journal,数据库非正常关闭时在再次启动时需要修复数据库,否则报错。加上--repair参数
(3)既然启动了数据库就必须要连接数据
mongo 127.0.0.1:10000
然后就行执行操作了
(三)数据库的操作
>show dbs :显示服务器有哪些数据库(类似有mysql的show databases)
>use test:切换数据库,数据test可以是不存在的数据库(这个和mysql一模一样啊,但是mysql时数据必须存在)
如果你不在这个库里建立数据的话,这个数据库时不被创建的
>db.dropDatabase():删除当前正在使用的这个数据库(db相当于是本数据库,类似于面向对象的self或this)
>db.cloneClone('1.1.1.1:10000'):从指定数据库上复制数据(没试过)
>db.repairDatabase():修复正在使用的数据库
>db.getName():显示当前正在使用的数据库名称
>db.stats():显示当前数据库的状态
>db.version():显示当前数据库版本
>db.getMongo():查看当前数据库的连接
(四)集合的操作(相当于表操作)
>db.createCollection("test1"):创建一个数据集合test1
>db.test2.save({name:"my name"}):这样直接插入一条数据,也会默认创建一个集合的
>db.getCollectionNames():显示当前数据库所有的集合名
>db.printCollectionStats():显示该数据库所有索引的状态
>db.test2.drop():删除集合test2 或>db.runCommand({"drop","test2"})