/*******************************************************************************************************************************/
基础知识:
一个mongod服务可以有建立多个数据库,每个数据库可以有多张表,这里的表名叫collection,
每个collection可以存放多个文档(document),每个文档都以BSON(binary json)的形式存放于硬盘中。
提醒:以下分析默认数据库没有添加用户
/*******************************************************************************************************************************/
一、常用指令
/----------------------------------------------------------------------------------------------/
查看mongodb支持的所有指令,直接输入help
查看当前数据库支持哪些方法:
db.help()
查看当前数据库下的某一张表支持哪些方法:db.表名.help()
/----------------------------------------------------------------------------------------------/
1、查询所有数据库列表:
show dbs
2、切换数据库
use+数据库名,
例如:(切换到使用名为'test'的数据库) use test
注意:如果数据库名不存在,则会新建一个该名字的数据库
3、
①查看数据库的状态
(比如:当前数据库的名字,有多少表,多少条数据,总大小等)
db.stats()
②查看当前数据库某一张表的状态
db.posts.stats();
③查看当前处于哪个数据库
(扩展:也可以用db.stats()间接得到)
db
④查看当前数据库下有哪些表
show collections
⑤查看表的大小
db.表名.dataSize()
⑥删除表
db.表名.drop()
⑦删除当前的数据库
db.dropDatabase()
⑧从指定的机器上复制指定数据库数据到某个数据库
例如:db.copyDatabase("mydb", "temp", "127.0.0.1");将本机的mydb的数据复制到temp数据库中
/*******************************************************************************************************************************/
例如:>db.stats() 得到如下结果:
{
"db" : "test", //当前数据库
"collections" : 3, //当前数据库多少表
"objects" : 4, //当前数据库所有表多少条数据
"avgObjSize" : 51, //每条数据的平均大小
"dataSize" : 204, //所有数据的总大小
"storageSize" : 16384, //所有数据占的磁盘大小
"numExtents" : 3,
"indexes" : 1, //索引数
"indexSize" : 8176, //索引大小
"fileSize" : 201326592, //预分配给数据库的文件大小
"nsSizeMB" : 16,
"dataFileVersion" : {
"major" : 4,
"minor" : 5
},
"ok" : 1
}
/*******************************************************************************************************************************/
4、表的增删查改操作
(针对foo表来分析)
①.插入数据:
db.foo.insert({"a":1})
或者
db.foo.save({'name':'ysz','address':{'city':'beijing','post':100096},'phone':[138,139]})
②.删除数据:
删除aa=1的记录: db.foo.remove({"aa":1})
删除所有的记录: db.foo.remove()
③.查找
查找所有
db.foo.find()
如果想知道表有多少条记录,可以用:db.foo.find().count()
④.修改
db.person.update({"name": "xiaoming"}, {"name": "xiaohong"})
注释:将"name": "xiaoming" 改为"name": "xiaohong"
二、数据库的迁移
两种方法:(1)先备份在还原;(2)远程克隆拷贝
(1).先备份在还原:
①利用mongodump备份(所有)数据库:
注意:(如果是WINDOWS上,可以直接双击mongodump.exe这个应用程序便可实现备份,默认备份到bin目录下,文件夹名字为dump)
mongodump -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -o 文件存在路径
如果没有用户谁,可以去掉-u和-p
如果导出本机的数据库,可以去掉-h。
如果是默认端口,可以去掉--port。
如果想导出所有数据库,可以去掉-d。
/*******************************************************************************************************************************/
例如:
目的:①
远程拷贝192.168.0.119这台服务器上的数据库到当前主机E盘的dump119文件夹中
mongodump -h 192.168.0.119 -o e:\dump119\
(因为用的是默认端口号27017,无用户名和密码,所有都省略)
②如果是本地备份,所有参数都可省略,直接mongodump -o e:\dump119\ (或者mongodump -h 127.0.0.1 -o e:\dump119\)
/*******************************************************************************************************************************/
②利用mongorestore还原(所有)数据库:
(前提:在本地e:\dump119\下有一份备份)
mongorestore e:\dump119\
如果加--drop意思是,先删除所有的记录,然后恢复。
即:mongorestore --drop e:\dump119\
(2).远程克隆
方法一:
db.cloneDatabase("hostname")
说明:复制远程主机的数据库到本地,该命令假设远程mongodb实例中拥有与本地相同的数据库名称
局限性:只能克隆相同的数据库。
/*******************************************************************************************************************************/
解释:
①比如说本地mongoDB中有test,admin这两个数据库,而远程那台服务器(192.168.100.140)有local,work这两个数据库。当使用db.cloneDatabase("192.168.100.140") , 显示克隆完成,但是什么数据也没克隆到,等于空操作;
②再例如本地mongoDB中有test,admin这两个数据库,而远程那台服务器(192.168.100.140)有test,work这两个数据库。
当使用db.cloneDatabase("192.168.100.140") ,目前本地切换到的是test数据库,此时只是克隆了远程服务器的test数据库而已,而work没有克隆到
如果本地切换到的是admin数据库,此时还是什么都克隆不到,还是空操作;
正确用法:
use work
//如果work数据库不存在就会创建,用db.stats()可以查看当前处于哪个数据库
db.dropDatabase()
//删除本地work数据库中所有的表 (如果不想删除,可以不执行这步)
db.cloneDatabase("192.168.100.140")
//克隆远端192.168.100.140服务器上的work数据库到本地work数据库上
/*******************************************************************************************************************************/
方法二:
db.copyDatabase(fromdb, todb, fromhost, username, password)
例如:
db.copyDatabase("work","test","192.168.100.140")
说明:将远端服务器(192.168.100.144)名为‘work’数据库拷贝到本地名为‘test’的数据库上
分析:方法二解决了方法一中本地必须有和远端服务器相同名数据库的问题。 不过其实只需在本地先创建一个相同名字的数据库在克隆其实结果也一样
补充:
1、备份得到的文件存储情况是这样的:(假如备份到名为dump文件夹中)
-----test/ (包含*.bson和*.json)
dump/-----local/(包含*.bson和*.json)
-----work/ (包含*.bson和*.json)
说明:备份的服务器中有3个数据库,所有的数据以.bson和.json两种形式备份