1、什么是MongoDB
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,类似json格式,因此可以存储比较复杂的数据类型。2、关系型数据库与非关系型数据库的区别
NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是 SQL”,它指的是非关系型的数据库,是以 key-value 形式存储,和传统的关系型数据库不一样,不一定遵循传统数据库的一些基本要求,比如说遵循 SQL 标准 、表结构。它没有sql语句。代表作:Redis、memcached、mongodb
什么时候建议使用 NoSql ?
1、对数据库高并发读写的需求2、对海量数据的高效率存储和访问的需求
3、对数据库的高扩展性和高可用性的需求
NoSql 和传统数据库简单对比。
非结构型数据库。没有行、列的概念。用 JSON 来存储数据。 集合就相当于“表 ”,文档就相当于“行”。3、数据库常用命令
1、Help 查看命令提示 db.help()2、创建/切换数据库 use user
3、查询数据库 show dbs
4、显示当前 DB 状态 db.stats()
5、查看当前 DB 版本 db.version()
6、查看当前 DB 的链接机器地址 db.getMongo()
7、删除数据库 db.dropDatabase()
4、Collection 聚集集合操作
1创建一个聚集集合
db.createCollection(”user",{capped:false,size:100000000,max:5})添加10M固定集合也就是表用记存储日志是最好的参数
参数:
name:集合的名字
capped:是否启用集合限制,如果开启需要制定一个限制条件,默认为不启用,如果开启不能删除数据
size:限制集合使用空间的大小,默认为没有限制,size的优先级比max要高
max:集合中最大条数限制,默认为没有限制
autoIndexId:是否使用_id作为索引,默认为使用(true或false)
2、得到指定名称的聚集集合
db.getCollection("user")3、得到当前 DB 的所有聚集集合
show tables4、显示当前 db 所有聚集的状态
db.printCollectionStats()5、document 文档操作
1、插入文档
(可以直接创建集合相当于db.createCollection) db.user.insert({name:”zhangsan",age:30})2、获得当前 db 的所有文档
db.user.find()3、更新文档
db.user.update({name:”zhangsan"},{$set:{name:”lisi",gender:'男'}});4、删除文档
db.user.remove({name:”zhagnsan"})5、条件查询
db.user.find({name:”zhagnsan”},{age:1,name:1}) 第一个参数:条件查询。第二个参数:显示哪些字段,
1:显示,-1:不显示
1、条件操作符
db.user.find({age:{$gt:5}}) 大于5数据就出来了db.user.find({age:{$lt:5}});小于5的数据出来
db.user.find({age:{$lte:5}});小于等于5的数据
db.user.find({age:{$gte:5}});大于等于5的数据
db.user.find({age:{$ne:5}});不等于5的数据
db.user.find({_id:{$gt:5}}).limit(8); 大于5且只显示8条
2、 Limit 与 Skip 方法
db.user.find().limit(8);只显示8条数据db.user.find().skip(8);跳过前面的8条数据
db.user.find().skip(1).limit(8);从第一条开始,每页显示8条数据,如果skip(9)且limt(8)则从第9条数据显示,每页显示8条数据,可以做分页。
3、排序
db.user.find().sort({age:1});升序db.user.find().sort({age:-1});降序
4、索引
索引是做优化,让数据读取速度更快。一般条件查询频繁的字段设置索引。比如:_id,还有咱们刚才的age。创建索引
db.user.createIndex({age:1});在age上建立索引1(升序),-1(降序),索引升序、降序和你的sort排序相关,如果升序和降序都要支持索引,那么就分别创建{age:1},{age:-1}db.user.createIndex({age:1},{background:true}); 当系统已有大量数据时,创建索引非常耗时,需在后台执行,只需指定“backgroud:true”即可。
查看详细索引信息 db.user.getIndexes();
查看简单索引信息 db.user.getIndexKeys();
删除所有索引 db.user.dropIndexes()
删除指定索引 db.user.dropIndexes({age:1})
数据库的导入/导出
导出:
使用mongodb自带导出工具mongoexport,在bin目录下面mongoexport -d dbname -c collectionname -o file --type json/csv -f field
参数说明:
-d :数据库名
-c :collection名
-o :输出的文件名
--type : 输出的格式,默认为json
-f :输出的字段,如果-type为csv,则需要加上-f "字段名"
导入:
使用mongodb自带导入工具mongoimport ,在bin目录下面mongoimport -d dbname -c collectionname --file filename --headerline --type json/csv -f field –jsonArray
参数说明:
-d :数据库名
-c :collection名
--file :要导入的文件
--type : 导入的格式,默认为json
-f :输出的字段,如果-type为csv,则需要加上-f "字段名"
--jsonArray:支持数组,如果出现Failed: error unmarshaling bytes on document #0: JSON decoder out of sync - data changing underfoot?使用这个参数试试