首先我们先了解下什么是MongoDB ?
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。 在大量数据下,承载性能好。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
它和MySQL的区别吗呐在于:
mongodb:
优点: 非关系型的数据库。
相对于mysql来说,它不需要提前创建表,以及表结构,为我们省 去了很多的不便
存储持久化,面向集合存储;易存储对象类型的数据。
性能方面能够快速查询( 支持动态查询,完全索引。)
json格式存储。
缺点: MongoDB占用空间过大 。
因为他是非关系型,所以关系能力比较薄弱。
mysql:
优点: 关系型数据库。
不同的引擎有不同的存储方法。
有较为成熟健全的体系。
缺点: 在海量数据进行查询的时候性能效率慢。
在创建数据库,表的时候比较费时,特别是在创建表的时候设定 的字段需要特别注意。
查询数据信息的时候,有的语法较为复杂,费时。
接下来总结性的mongodb的语法:
Linux(Ubuntu16.04)
启动 MongoDB :
sudo service mongod start
创建数据库:
use database_name
注:(如果数据库不存在,则创建数据库,否则切换到指定数据库)
删除数据库:
db.dropDatabase()
查看所有数据库:
show dbs
MongoDB 创建集合:
db.createCollection()
MongoDB 删除集合:
db.collection.drop()
MongoDB 插入文档:
db.COLLECTION_NAME.insert(document)
MongoDB 更新文档:
db.collection.update()
MongoDB 删除文档:
db.collection.remove()
MongoDB 查询文档:
db.collection.find()
MongoDB AND 条件:
>db.col.find({key1:value1, key2:value2}).pretty()
注:(MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,即常规 SQL 的 AND 条件)
MongoDB OR 条件:
MongoDB OR 条件语句使用了关键字 $or,
db.col.find({$or:[{"by":"肖申克的救赎"},{"title": "人性/现实"}]}).pretty()
MongoDB 条件操作符:
作用:条件操作符用于比较两个表达式并从mongoDB集合中获取数据。
(>) 大于 - $gt
(<) 小于 - $lt
(>=) 大于等于 - $gte
(<= ) 小于等于 - $lte
大于操作符 - $gt:
db.col.find({likes : {$gt : 100}})
大于等于操作符 - $gte:
db.col.find({likes : {$gte : 100}})
小于操作符 - $lt:
db.col.find({likes : {$lt : 150}})
小于操作符 - $lte:
db.col.find({likes : {$lte : 150}})
使用 (小于) 和 (大于) 查询 - $lt 和 $gt:
db.col.find({likes : {$lt :200, $gt : 100}})
MongoDB Limit() 方法:
作用:指定从MongoDB中读取的记录条数
db.collection_name.find().limit(number)
MongoDB Skip() 方法:
作用:跳过指定数量的数据
db.collection_name.find().limit(number).skip(number)
MongoDB 排序sort() 方法:
作用: 用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。
db.collection_name.find().sort({key:1(-1)})
MongoDB 索引 createIndex() 方法:
db.col.createIndex({"title":1})
注: 语法中 Key 值为你要创建的索引字段,1 为指定按升序创建索引,如果你想按降序来创建索引指定为 -1。
MongoDB 聚合:
作用: 聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 count(*)。
db.collection_name.aggregate(aggregate_operation)
MongoDB 备份(mongodump)
在Mongodb中我们使用mongodump命令来备份MongoDB数据。该命令可以导出所有数据到指定目录中。
mongodump -h dbhost -d dbname -o dbdirectory
-h:MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017
-d:需要备份的数据库实例,例如:test
-o:备份的数据存放位置,例如:c:\data\dump,当然该目录需要提前建立,在备份完成后,系统自动在dump目录下建立一个test目录,这个目录里面存放该数据库实例的备份数据
如果没有开启权限
mongodump -h 127.0.0.1:27017 -d 数据库名称 -o ~/Desktop/数据库备份的路径
mongodump -h 127.0.0.1:27017 -o ~/Desktop/数据库备份的路径
如果开启了权限设置(使用超级管理员权限)
我们也可以使用账号密码的方式备份指定用户的数据库
设置了超级管理员也可以使用如下方法备份
mongodump -u username -p password --authenticationDatabase 'admin' -d dbname -o dbpath
恢复备份
mongodb使用 mongorestore 命令来恢复备份的数据。
mongorestore -h hostname:port -d dbname --dir path
-h (host):MongoDB所在服务器地址,默认为: localhost:27017
-d (db):需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2
--dir:指定备份的目录
如果没有开启权限
mongorestore -h 127.0.0.1:27017 -d 数据库名称 --dir 数据库备份文件路径
mongorestore -h 127.0.0.1 -dir 数据库备份文件路径
下面是我添加了管理员权限之后的备份命令
如果开启了权限设置(使用超级管理员权限)
mongorestore -u username -p password --authenticationDatabase 'admin' -d 数据库名称 --dir 数据库备份文件路径
MongoDB数据导入与导出
导出工具:mongoexport
mongoexport -d dbname -c collectionname -o file --type json/csv -f field
参数说明:
d :数据库名
c :collection名
o :输出的文件名
-type : 输出的格式,默认为json
f :输出的字段,如果-type为csv,则需要加上-f "字段名"
示例:
导出json
mongoexport -d class1804 -c books -o ~/桌面/dump/books.json --type json
导出csv
mongoexport -d class1804 -c books -o ~/桌面/dump/books.csv --type csv -f 'by_user,likes'
数据导入:mongoimport
mongoimport -d dbname -c collectionname --file filename --headerline --type json/csv
参数说明:
d:数据库名
c:collection名
-type:导入的格式默认json
f:导入的字段名
-headerline:如果导入的格式是csv,则可以使用第一行的标题作为导入的字段
-file:要导入的文件
MongoDB 复制(副本集)
作用: 是将数据同步在多个服务器的过程,复制还允许从硬件故障和服务中断中恢复数据。
MongoDB复制原理
mongodb的复制至少需要两个节点。其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。
mongodb各个节点常见的搭配方式为:一主一从、一主多从。