码迷,mamicode.com
首页 > 数据库 > 详细

mongodb学习总结(一)

时间:2016-07-16 00:50:13      阅读:426      评论:0      收藏:0      [点我收藏+]

标签:

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)
./mongod
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()接收可选参数,可选参数列表如下:
Parameter          Type        Description
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:  用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。                 db.col.aggregate([{$match:{likes:{$lte:100}}},{$group:{_id:"$title",count:{"$sum":"$likes"}}}])
$limit:  用来限制MongoDB聚合管道返回的文档数。                                                db.col.aggregate({$limit:2})
$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

mongodb学习总结(一)

标签:

原文地址:http://www.cnblogs.com/wanshoushou/p/5674967.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!