mongodb学习总结(一)

1.下载解压mongodb,配置环境变量
tar -zxvf mongodb-linux-x86_64-rhel62-3.2.7.tgz
export PATH=<mongodb-install-directory>/bin:$PATH

2.创建数据保存目录
mkdir -p /data/db

3.mongodb启动
./mongod                                         //默认启动
./mongod --dbpath=/data/db             //启动mongodb并指定数据保持目录
./mongod --dbpath=/data/db --rest    //启动mongodb并启动web用户界面(http://ip:28017)

4.使用本地客户端关闭mongodb(禁止使用kill -9)
./mongo
use admin
db.shutdownServer()                                           //默认关闭
db.shutdownServer({force : true})                       //强制关闭
db.shutdownServer({force : true, timeoutsec : 5}) //指定超时时间,超时时间的关闭服务器

5.数据库基本操作命令
mongodb://admin:123456@localhost/test                               //使用用户名和密码连接登陆到指定数据库
use DATABASE_NAME                                                           //创建数据库
show dbs                                                                             //查看所有数据库
db.dropDatabase()                                                                //删除数据库
db.collection.drop                                                                  //删除集合
db.col.insert(document)                                                         //向 runoob 数据库插入一些数据
db.col.save(document)                                                           //类似insert()方法,如果指定 _id,则会更新该_id的数据。
db.col.remove({"age":"255"},1)                                              //删除一条数据
db.col.update({"name":"hello"},{$set:{"age":"255"}})              //更新数据
db.col.update({"age":{$eq:"24"}},{$set:{"name":"hehe"}});    //更新指定文档
db.col.save(<document>,{writeConcern: <document>})           //通过传入的文档来替换已有文档,参数writeConcern :可选,抛出异常的级别。
db.col.find()                                                                          //查询数据
db.col.find().pretty()                                                              //格式化查询数据
db.col.find({"name":"hehe","_id":"abc"})                                  //AND条件查询
db.col.find({$or:[{"name":"hehe"},{"_id":"abc"}]})                  //OR条件查询

6.mongodb条件操作符
(>)     大于        - $gt      db.col.find({"num":{$gt:3}})
(<)     小于        - $lt       db.col.find({"num":{$lt:3}})
(>=)   大于等于  - $gte     db.col.find({"num":{$gte:3}})
(<= )  小于等于  - $lte      db.col.find({"num":{$lte:3}})

7.mongodb中$type操作符
Double                          1  db.col.find({"num" : {$type : 1}})
String                           2
Object                           3
Array                            4
Binary data                    5
Undefined                      6    已废弃。
Object id                       7
Boolean                         8
Date                             9
Null                              10
Regular Expression        11
JavaScript                     13
Symbol                         14
JavaScript (with scope)   15
32-bit integer                16
Timestamp                    17
64-bit integer                18
Min key                         255    Query with -1.
Max key                        127

7.mongodb中Limit与Skip方法
db.col.find().limit(1)                    //读取指定数量的数据记录
db.col.find().skip(1)                    //跳过指定数量的数据
db.col.find().limit(10).skip(10*0)  //分页查询第一页

8.mongodb sort()方法
db.col.find().sort({"num":1})       //1为升序排列
db.col.find().sort({"num":-1})      //-1是用于降序排列

9.mongodb使用ensureIndex()方法来创建索引。
db.col.ensureIndex({"num":1})       //1为指定按升序创建索引
db.col.ensureIndex({"num":1})       //-1为指定按降序来创建索引

ensureIndex()接收可选参数,可选参数列表如下:
background Boolean
###建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 "background" 可选参数。 "background" 默认值为false。
unique Boolean
###建立的索引是否唯一。指定为true创建唯一索引。默认值为false.
name string
###索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称。
dropDups Boolean
###在建立唯一索引时是否删除重复记录,指定 true 创建唯一索引。默认值为 false.
sparse Boolean
###对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为 false.
expireAfterSeconds integer
###指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。
v index version
###索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本。
weights document
###索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重。
default_language string
###对于文本索引,该参数决定了停用词及词干和词器的规则的列表。 默认为英语
language_override string
###对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的language,默认值为language.

10.mongodb使用aggregate()聚合方法,主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。
db.col.aggregate([{$group : {_id : "$num", count : {$sum : 1}}}])
聚合的表达式:
$sum
db.col.aggregate([{$group:{_id:"$by_user",num_tutorial:{$sum:"$likes"}}}])
###计算总和。
$avg
db.col.aggregate([{$group:{_id:"$by_user",num_tutorial:{$avg:"$likes"}}}])
###计算平均值
$min
db.col.aggregate([{$group:{_id:"$by_user",num_tutorial:{$min:"$likes"}}}])
###获取集合中所有文档对应值得最小值。
$max
db.col.aggregate([{$group:{_id:"$by_user",num_tutorial:{$max:"$likes"}}}])
###获取集合中所有文档对应值得最大值。
$push
db.col.aggregate([{$group:{_id:"$by_user",url:{$push:"$url"}}}])
###在结果文档中插入值到一个数组中。
$addToSet
db.col.aggregate([{$group:{_id:"$by_user",url:{$addToSet:"$url"}}}])
###在结果文档中插入值到一个数组中,但不创建副本。
$first
db.col.aggregate([{$group:{_id:"$by_user",first_url:{$first:"$url"}}}])
###根据资源文档的排序获取第一个文档数据。
$last
db.col.aggregate([{$group:{_id:"$by_user",last_url:{$last:"$url"}}}])
###根据资源文档的排序获取最后一个文档数据

聚合框架中常用的几个操作:
$project
db.col.aggregate({$project:{"_id":0,"title":1,"tags":1}})
###修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
$match
db.col.aggregate([{$match:{likes:{$lte:100}}},{$group:{_id:"$title",count:{"$sum":"$likes"}}}])
###用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
$limit
db.col.aggregate({$limit:2})
###用来限制MongoDB聚合管道返回的文档数。
$skip
db.col.aggregate({$skip:1})
###在聚合管道中跳过指定数量的文档,并返回余下的文档。
$unwind
###将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
$group
###将集合中的文档分组,可用于统计结果。
$sort
###将输入文档排序后输出。
$geoNear
###输出接近某一地理位置的有序文档。

11.mongodb复制(副本集)
指定--replSet 选项来启动mongodb        mongod --port 27017 --dbpath "/data/db" --replSet rs0
启动一个新的副本集                             rs.initiate()         ###客户端使用命令
查看副本集的配置                                rs.conf()
查看副本集状态                                   rs.status()
添加副本集的成员                                rs.add(HOST_NAME:PORT)
判断当前运行的Mongo服务是否为主节点   db.isMaster()

12.mongodb分片
MongoDB中使用分片集群结构分布中主要组件:
            Shard:     用于存储实际的数据块,实际生产环境中一个shard server角色可由几台机器组个一个relica set承担,防止主机单点故障
 Config Server:     mongod实例,存储了整个 ClusterMetadata,其中包括 chunk信息。
Query Routers:    前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。
步骤一:启动Shard Server
mkdir -p /data/mongoDB/shard/s0
mkdir -p /data/mongoDB/shard/s1
mkdir -p /data/mongoDB/shard/s2
mkdir -p /data/mongoDB/shard/s3
mkdir -p /data/mongoDB/shard/log
/usr/local/mongodb/mongodb-linux-x86_64-rhel62-3.2.7/bin/mongod --port 27020 --dbpath=/data/mongoDB/shard/s0 --logpath=/data/mongoDB/shard/log/s0.log --logappend --fork
/usr/local/mongodb/mongodb-linux-x86_64-rhel62-3.2.7/bin/mongod --port 27021 --dbpath=/data/mongoDB/shard/s1 --logpath=/data/mongoDB/shard/log/s1.log --logappend --fork
/usr/local/mongodb/mongodb-linux-x86_64-rhel62-3.2.7/bin/mongod --port 27022 --dbpath=/data/mongoDB/shard/s2 --logpath=/data/mongoDB/shard/log/s2.log --logappend --fork
/usr/local/mongodb/mongodb-linux-x86_64-rhel62-3.2.7/bin/mongod --port 27023 --dbpath=/data/mongoDB/shard/s3 --logpath=/data/mongoDB/shard/log/s3.log --logappend --fork
步骤二: 启动Config Server
mkdir -p /data/mongoDB/shard/config
/usr/local/mongodb/mongodb-linux-x86_64-rhel62-3.2.7/bin/mongod --port 27100 --dbpath=/data/mongoDB/shard/config --logpath=/data/mongoDB/shard/log/config.log --logappend --fork
步骤三: 启动Route Process
/usr/local/mongodb/mongodb-linux-x86_64-rhel62-3.2.7/bin/mongos --port 40000 --configdb localhost:27100 --fork --logpath=/data/mongoDB/shard/log/route.log --chunkSize 500
步骤四: 配置Sharding
接下来,我们使用MongoDB Shell登录到mongos,添加Shard节点
/usr/local/mongodb/mongodb-linux-x86_64-rhel62-3.2.7/bin/mongo admin --port 40000
mongos> db.runCommand({ addshard:"localhost:27020" })
mongos> db.runCommand({ addshard:"localhost:27021" })
mongos> db.runCommand({ addshard:"localhost:27022" })
mongos> db.runCommand({ addshard:"localhost:27023" })
mongos> db.runCommand({ enablesharding:"test" })          ####设置分片存储的数据库
mongos> db.runCommand({ shardcollection: "test.log", key: { id:1,time:1}})
步骤五: 程序代码内无需太大更改,直接按照连接普通的mongo数据库那样,将数据库连接接入接口40000

13.mongodb数据备份和数据恢复
mongodump命令脚本语法如下:
./bin/mongodump -h 127.0.0.1:27020 -d test -o /data/dump
-h:mongdb所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017
-d:需要备份的数据库实例,例如:test
-o:备份的数据存放位置,例如:/data/dump,当然该目录需要提前建立,在备份完成后,系统自动在dump目录下建立一个test目录,这个目录里面存放该数据库实例的备份数据。
mongorestore命令脚本语法如下:
./bin/mongorestore --host=127.0.0.1 --port=27020 --db=test --dir=/data/dump/test --drop
./bin/mongorestore --help
-h:mongodb所在服务器地址
-d:需要恢复的数据库实例,例如:test
--dir:备份数据所在位置,例如:/data/dump/test
--drop:恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦!

14.mongodb中提供了mongostat和mongotop两个命令来监控mongodb的运行情况。
./bin/mongostat --host=127.0.0.1 --port=27020
./bin/mongotop --host=127.0.0.1 --port=27020  3

 

参考:http://www.runoob.com/mongodb/mongodb-tutorial.html

posted @ 2016-07-15 22:46  万首real  阅读(1487)  评论(0编辑  收藏  举报