MongoDB
MongoDB存储格式为JSON
![](https://images2015.cnblogs.com/blog/801928/201608/801928-20160814130857281-95039313.png)
![](https://images2015.cnblogs.com/blog/801928/201608/801928-20160814130857703-1398931416.png)
![](https://images2015.cnblogs.com/blog/801928/201608/801928-20160814130858906-1847045704.png)
![](https://images2015.cnblogs.com/blog/801928/201608/801928-20160814130859531-500240435.png)
![](https://images2015.cnblogs.com/blog/801928/201608/801928-20160814130859937-356441713.png)
![](https://images2015.cnblogs.com/blog/801928/201608/801928-20160814130900296-1905500289.png)
![](https://images2015.cnblogs.com/blog/801928/201608/801928-20160814130900562-1451767867.png)
![](https://images2015.cnblogs.com/blog/801928/201608/801928-20160814130901000-1120247159.png)
![](https://images2015.cnblogs.com/blog/801928/201608/801928-20160814130902312-1865215807.png)
![](https://images2015.cnblogs.com/blog/801928/201608/801928-20160814130902984-21264952.jpg)
用Mongo.exe测试
主要运行Mongod.exe存储数据
运行Mongdb
基本概念:数据库,集合(表),文档(行) ,面向文档的数据库
组成:多个文档组成集合,多个集合组成数据库。
_id:_id是mongo默认添加的唯一键,确保集合总每个文档都有唯一标识,可以自己定义,也可以系统默认生成
自定义生成的话可以加快速度,默认生成为ObjectId对象
文档:键值对,![](https://images2015.cnblogs.com/blog/801928/201608/801928-20160814130856921-1363526794.png)
![](https://images2015.cnblogs.com/blog/801928/201608/801928-20160814130856921-1363526794.png)
键的类型:字符串
值的类型:字符串,整型、布尔型等
集合概念:类似与表,1.由文档组成 2.无模式,也就是文档的类型不确定,而普通数据表当中列都是确定的 3.集合分类:由于这种模式,所以现在可以把所有文档放在一个集合当中,那么就造成相当大的管理问题了 ,所以有了子集合的出现
集合命名(1)分类:把相应的数据放到不同集合当中,也就是分好类
(2)子集合分类:通过命名来来划分子集合,也就是仅仅是一个命名,让你可以把集合归类,并不真实存在
,如下:不一定非要存在ttt集合
![](https://images2015.cnblogs.com/blog/801928/201608/801928-20160814130857281-95039313.png)
![](https://images2015.cnblogs.com/blog/801928/201608/801928-20160814130857703-1398931416.png)
例子:
对于网站的日志记录,可以根据日志的级别进行存储,Info级别日志存放在Info 集合中,Debug 级别日志存放在Debug 集合中,这样既方便了管理,也提供了查询性能。
基本概念注意:问当中键值对是有序的
{“greeting”:“hello,world”,“foo”: 3}
{“foo”: 3 ,“greeting”:“hello,world”}
数据库的命名:和文件夹的命名相同
关系型数据库通过外键关联的数据表:通过嵌套文档将关联的数据表写到一个文档当中(实际想想外键引用起来不就是嵌套文档)
db.te.insert(
{"dong":"bao"},
{"address":{"abao":123,"www":123}}
)
这种引用外键,创建关联表方式好处:将以前的多张表表示为一个文档,比表与表之间的连接查询更方便迅速,数据更易于管理。
放弃关系型模型,主要原因就是未来获得更加方便的扩展性
存储格式:BSON格式存储,输入数据类型为JSON格式
下载安装:下载mongo,直接安装就好了,或者是解压,加入路径到path当中
启动服务器
mongod --dbpath C:\MongoDb\data\db -logpath C:\MongoDB\data\log\mongolog.log
在date目录定义log 和 db目录
运行Mongd.exe进入测试
mongo 启动客户端
mongo 启动客户端
启动时选择配置:
数据库操作
查看所有数据库: show dbs
创建数据库或者选择:use DATABASE_NAME(如果数据库不存在,则创建数据库,否则切换到指定数据库)
注意:默认数据库为test,如果数据库为空不会显示出来,插入数据才显示出来
删除数据库:db.dropDatabase()删除当前数据库,先用use选择指定数据库后进行操作
集合操作:
创建数据集合(等同于mysql当中的数据表)db.createCollection("test")
集合不用创建,插入的时候就自动创建
查看集合中的数据: db.test.find()
修改数据 db.test.update({"age":20},{"$set":{"age":300}}) db.test.update({"age":20},{"age":300})
save() 方法也可修改数据,如果查询不存在会插入数据
插入数据 db.test.insert({"name":"dongbao"})
一次插入多条数据 db.test.insert({"name":"dong"},{"age":20})
db.test.insert({ID:2,UserName:"dong,",password:"2",email:"jingya@163.com"})
删除指定文档 db.test.remove({"age":25})
删除全部文档 db.test.remove()
删除指定集合 db.指定集合.drop()
查看指定数据库所有集合:db.getCollectionNames()
查看所有集合:show collections()
文档操作 :文档为json格式,存储是bson存储,Key:Value key为全英文,可以不加双引号,数字可以不用加
导入数据:
1.mongoimport导入json数据到goods数据库:
mongoimport -d goods -c test test.bat
不指定-c导入时自动创建
导入指定集合到goods数据库test集合,相当于导入json格式数据而已
2.mongoimport导入csv数据到goods数据库:
3.mongorestore导入数据库级别:
导入时会报这样的错误
![](https://images2015.cnblogs.com/blog/801928/201608/801928-20160814130858906-1847045704.png)
原因是没有指定导入目录,
1.指定导入bson文件:
mongorestore -d goods D:\mongo\import_export\goods\test.bson
2.指定含有bson的文件:
mongorestore -d goods D:\mongo\import_export\goods
--drop (不用删除原来数据库,可以直接导入时自动删除)
注意:直接导入json文件不行
导出数据:
1.mongoexport 导出集合到.bat文件:
mongoexport -d goods -c test -o test.dat
mongoexport 启动 -d(database指定数据库) -c(collection指定集合) -o(指定导出文件地址和类型)
2.mongoexport 导出集合到csv文件:
3.mongodump导出数据库到文件bson,json格式:mongodump
-d goods
(-o test 指定导出位置,指定文件夹)
默认创建dump/goods文件夹 下面放放着如下数据
![](https://images2015.cnblogs.com/blog/801928/201608/801928-20160814130859531-500240435.png)
4.导出所有数据库文件: mongodump (-h 127.0.0.1 -o /home/zhangy/mongodb/)
-h表示主机地址,也可以使别的主机(服务器) -d database -c collection --csv(默认保存为json格式),-o保存路径+保存文件名称,-f(节选字段) -q(查询结果)
5.导出部分字段:mongoexport -h "127.0.0.1" -d seo -c kw_city --csv -o test1.csv -f city,state
6.导出查询结果:mongoexport -h "127.0.0.1" -d seo -c kw_city --csv -o test1.csv -q '{"state":"ny"}' -f city,state
7.导出json数据格式数据: mongoexport -d goods -c spgoods ( -q '{"state":"ny"}' -f city,state)
连接主机进行数据库操作:
注意:
mongodb数据库命令区分大小写,如db.dropDatabase()写错db.dropdatabase()就会出错。
查看帮助:mongoexport --help
mongoxport 导出csv中文乱码,用notepad++打开后设置为utf-8编码后再用excel打开就可以了
![](https://images2015.cnblogs.com/blog/801928/201608/801928-20160814130859937-356441713.png)
![](https://images2015.cnblogs.com/blog/801928/201608/801928-20160814130900296-1905500289.png)
![](https://images2015.cnblogs.com/blog/801928/201608/801928-20160814130900562-1451767867.png)
待处理:CSV文件类型,mongo导入导出数据到csv文件类型,复杂查询整理
mongo原理整理,查看所有集合,postgresql mongo备份数据库
上服务器先备份数据
![](https://images2015.cnblogs.com/blog/801928/201608/801928-20160814130901000-1120247159.png)
为什么产生两个文件?
mongoexport使用参数:
-h:指明数据库宿主机的IP
-u:指明数据库的用户名
-p:指明数据库的密码
-d:指明数据库的名字
-c:指明collection的名字
-f:指明要导出那些列
-o:指明到要导出的文件名
-q:指明导出数据的过滤条件
mongoimport使用参数
-h:指明数据库宿主机的IP
-u:指明数据库的用户名
-p:指明数据库的密码
-d:指明数据库的名字
-c:指明collection的名字
-f:指明要导入那些列
-type:指明要导入的文件格式
-headerline:指明第一行是列名,不需要导入
-file:指明要导入的文件
ObjectId对象:![](https://images2015.cnblogs.com/blog/801928/201608/801928-20160814130901562-868458372.jpg)
![](https://images2015.cnblogs.com/blog/801928/201608/801928-20160814130901562-868458372.jpg)
![](https://images2015.cnblogs.com/blog/801928/201608/801928-20160814130902312-1865215807.png)
BSON详解:
存储用到是BSON格式,导出为bson,json,csv格式
![](https://images2015.cnblogs.com/blog/801928/201608/801928-20160814130902984-21264952.jpg)
当Client端要将写入文档,使用查询等等操作时,需要将文档编码为BSON格式,然后再发送给Server端。同样,Server端的返回结果也是编码为BSON格式再放回给Client端的。
也就是文档-》查询(插入)-》BSON(服务器)-》文档(解码)-》客户