mongodb的安装和sql操作

 

mongodb安装
环境:centos6.5
https://www.mongodb.org/dl/linux/x86_64
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.2.4.tgz


1    安装mongodb
cd /usr/local/src
tar -xf mongodb-linux-x86_64-rhel62-3.4.4
mv mongodb-linux-x86_64-rhel62-3.4.4 /usr/local/mongodb    改名到/usr/local下名为mongodb
cd /usr/local/mongodb        mongodb主目录
mkdir /usr/local/mongodb/data    数据目录
mkdir /usr/local/mongodb/log    日志目录

2    启动mongodb
使用mongodb命令建立一个数据库链接,端口设置10001
数据库路径:/usr/local/mogodb/data
日志路径:/usr/local/mogodb/log/mogodb.log
启动程序放在后台,下面命令执行后按ctrl+c
nohup /usr/local/mogodb/bin/mogod --dbpath=/usr/local/mogodb/data --logpath=/usr/local/mongodb/log/mongl.log &
mongodb默认端口是27017

ps -ef | grep mongodb
root     14858 14518  1 15:01 pts/1    00:00:01 /usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data/ --logpath=/usr/local/mongodb/log/mongo.log
root     14887 14518  0 15:02 pts/1    00:00:00 grep mongodb
nestat -ltpun | grep 14858
tcp        0      0 0.0.0.0:27017               0.0.0.0:*                   LISTEN      14858/mongod
lsof -i:27017
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mongod  14858 root    7u  IPv4 145311      0t0  TCP *:27017 (LISTEN)

3    设置环境变量
vim /etc/profile
export PATH=$PATH:/usr/local/mongodb/bin/
source /etc/profile

4    写shell脚本放到server中,参数写到配置文件中,方便启动和关闭mongodb
cat /usr/local/mongodb/mongodb.conf
port=27017
dbpath=/usr/local/mongodb/data
logpath=/usr/local/mogodb/log/mongo.log
logappend=true

5 编写启动脚本
vim /etc/init.d/mongodb
chmod 755 /etc/init.d/mongodb
/etc/init.d/mongodb status
/etc/init.d/mongodb stop
/etc/init.d/mongodb start
lsof -i:27017

#!/bin/bash
#
# mongod        Start up the MongoDB server daemon
#
# source function library
. /etc/rc.d/init.d/functions
#定义命令
CMD=/usr/local/mongodb/bin/mongod
#定义配置文件路径
INITFILE=/usr/local/mongodb/mongodb.conf
start()
{
    #&表示后台启动,也可以使用fork参数
    $CMD -f $INITFILE &
    echo "MongoDB is running background..."
}
   
stop()
{
    pkill mongod
    echo "MongoDB is stopped."
}
   
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    *)
        echo $"Usage: $0 {start|stop}"
esac

5    通过shell连接mongodb
# 在客户机上连接本机mongodb:mongo 192.168.133.143:27017
#mongo
2017-06-03T15:17:55.700+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2017-06-03T15:17:55.700+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2017-06-03T15:17:55.700+0800 I CONTROL  [initandlisten]
2017-06-03T15:17:55.700+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2017-06-03T15:17:55.700+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
>help        help可以查看他的参数

mongodb非正常关闭,导致启动失败的问题
关闭后再次重启后发现报错信息:
#/usr/local/mongodb/bin/mongod --logpath
/usr/local/mongodb/log/system.log --logappend --dbpath /data/mongodb --directoryperdb
 --auth --journal --profile=1 --slowms=5 --fork
forked process:4853
all output going to:/usr/local/mongodb/log/system.log
查看日志:
其中有句话:j._34:can't find its prececding file
            journal dir=/data/mongodb/journal
            dbexit:really exiting now
这是由于mongodb非正常关闭导致的
解决办法:
rm -rf /data/mongodb/mongod.lock
/usr/local/mongodb/bin/mongod --logpath --dpath /data/mongodb --repair
rm -rf /data/mongodb/journal/*j._4
启动mongodb:/usr/local/mongodb/bin/mongod --logpath --dbpath /data/mongodb
--directoryperdb --auth --journal --profile=1 --slowms=5 --fork &
正确关闭:
>use admin
>db.shutdownServer()
或者killall mongod




yum安装mongodb
1    创建repo
vim /etc/yum.repo.d/mongo-org.repo
[mongodb-org-3.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.2/x86_64/
gpgcheck=0
enabled=1

2    安装mongodb和相关工具
yum -y install mongodb-org
service mongod start
chkconfig mongod on
lsof -i:27017
日志文件:/var/log/mongodb/mongodb.log
配置文件:/etc/mongod.conf
数据目录:/var/lib/mongo

3    数据文件解释:
 cat /etc/mongod.conf
# mongo.conf        
#where to log    
logpath=/var/log/mongo/mongod.log    
logappend=true #以追加方式写入日志    
# fork and run in background    
fork = true        
#port = 27017 #端口         
dbpath=/var/lib/mongo #数据库文件保存位置    
directoryperdb=true
# Enables periodic logging of CPU utilization and I/O wait    
#启用定期记录CPU利用率和 I/O 等待    
#cpu = true   
     # Turn on/off security.  Off is currently the default   
# 是否以安全认证方式运行,默认是不认证的非安全方式    
#noauth = true   
#auth = true   
# Verbose logging output.    
# 详细记录输出    
#verbose = true   
# Inspect all client data for validity on receipt (useful for   
# developing drivers)用于开发驱动程序时的检查客户端接收数据的有效性    
#objcheck = true        
# Enable db quota management 启用数据库配额管理,默认每个db可以有8个文件,可以用quotaFiles参数设置    
#quota = true   
# 设置oplog记录等级    
# Set oplogging level where n is    
#   0=off (default)    
#   1=W    
#   2=R    
#   3=both    
#   7=W+some reads    
#oplog = 0   
# Diagnostic/debugging option 动态调试项    
#nocursors = true        
# Ignore query hints 忽略查询提示    
#nohints = true   
# 禁用http界面,默认为localhost:28017   
# Disable the HTTP interface (Defaults to localhost:27018).这个端口号写的是错的    
#nohttpinterface = true        
# 关闭服务器端脚本,这将极大的限制功能    
# Turns off server-side scripting.  This will result in greatly limited    
# functionality    
#noscripting = true   
# 关闭扫描表,任何查询将会是扫描失败    
# Turns off table scans.  Any query that would do a table scan fails.    
#notablescan = true   
# 关闭数据文件预分配    
# Disable data file preallocation.    
#noprealloc = true   
# 为新数据库指定.ns文件的大小,单位:MB    
# Specify .ns file size for new databases.    
# nssize = <size>    
# Accout token for Mongo monitoring server.    
#mms-token = <token>    
# mongo监控服务器的名称    
# Server name for Mongo monitoring server.    
#mms-name = <server-name>    
# mongo监控服务器的ping 间隔    
# Ping interval for Mongo monitoring server.    
#mms-interval = <seconds>    
# Replication Options 复制选项    
# in replicated mongo databases, specify here whether this is a slave or master 在复制中,指定当前是从属关系    
#slave = true   
#source = master.example.com    
# Slave only: specify a single database to replicate    
#only = master.example.com    
# or    
#master = true   
#source = slave.example.com   

日常操作命令:
1)登录和退出
默认bind绑定的ip是127.0.0.1以及端口27017
mongo
mongo 127.0.0.1:27.17
绑定固定ip,比如bind_ip=168.133.142.11
mongo 168.133.142.11:27017
连接某个库
mongo ip:port/库名 -u用户名 -p密码
>show collections
mongodb会自动连接一个名为test的库,如果该库不存在,自动创建

关于命令的操作
>show dbs
查看服务器上的数据库

>use syp;
mongo中,db代表当前使用的数据库,db从test变成syp,如果没有syp,就会创建
并且不插入数据的话,该库也创建不了。

>show collections
查看当前数据库的集合

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
创建数据库
>use syp;
>show dbs;
>db.syp.insert({"name":"testdb"})
>show dbs

删除数据库
>db.dropDatase()
>show dbs

查看当前数据库
>db
>db.getName();

当删除数据test后,当前的db还是指向它,只有当切换数据库后,xxx才能消失。
>use test1
>db
>show dbs

修复当前库
>db.repairDatabase();

查看当前数据库状态
>db.stats();
当前db版本
>db.version();
查看当前db的链接机器地址
>db.getMongo();
从指定主机上克隆数据库
db.cloneDatabase("192.168.133.143");

从指定的机器上复制指定数据库数据到某个数据库
将本机的master_slave数据复制到wangshibo数据库中
>db.copyDatabases("master_slave","wangshibo","127.0.0.1");

collection操作

新建collection
>db.createCollection("hello")
>show collections

直接向一个不存在的collection中插入数据也能创建一个collection
>db.hello2.insert({"name":"lfqy"})
>show collections

删除collection
>db.Hello.drop()
ture    返回true说明删除成功,返回false说明删除失败

重命名collection
>show clooections
>db.hello2.renameCollection("Hello")
>show collections

建立索引在HELLO集合上,建立对ID字段的索引,1代表升序
>db.HELLO.ensureIndex({ID:1})



Record级别的操作

插入操作:
向user集合中插入两条记录:
>db.user.insert({'name':'GalGadot','gender':'female','age':28,'salary':11000})
>db.user.insert({'name':'Mike','gender':'female','age':28,'salary':1000})
用save完成类似的插入操作
>db.user.save({'name':'jim','gender':'male','age':32,'salary':8000})

查找操作
查找集合中的所有记录
>db.user.find()
查找集合中符合条件的记录
(1)单一条件
查询age为26的数据
>db.user.find({"age":26})
查询salary大于7000的数据
>db.user.find({salary:{$gt:7000}})
查询name中包含‘ent’的数据
>db.user.find({name:/ent/})
查询name中以G开头的数据
>db.user.find({name:/^G/})
查询name中以G结尾的数据
>db.user.find({name:/$G/})

 (2)多条件“与”
查询age小于30,salary大于7000的数据
>db.user.find({age:{$1t:30},salary:{$gt:7000}})

 (3)多条件“或”
查询age小于30,或者salary大于1000的记录
>db.user.find({$or:[{salary:{$gt:1000}},{age:{$1t:30}}]})

 (4)查询第一条记录
 将上面的find替换成findOne
 
 (5)查询user集合中的name,age,salary字段
>db.user.find({},{name:1,age:1,salary:true})
    1表示显示此列的意思,也可以用true表示
>db.user.find({},{name:1,age:true,salary:1})    
 
 (6)查询指定字段的数据,并去掉重复数据
>db.user.distinct('gender')

对查询结果集的操作
提供了pretty print工具,db.collection.pretty()或者db.collection.forEach(printjson)
>db.user.find().pretty()

指定结果集显示的条目
显示结果集中的前3条记录
>db.user.find().limit(3)
查询第一条以后的所有数据
>db.user.find().skip(1)
查询跳过前两条以后的数据
>db.user.find().skip(2)
对结果集升序
>db.user.find().sort({salary:1})
降序
>db.user.find().sort({salary:-1})

统计集合中所有的记录条数
>db.user.find().count()
查询符合条件的记录数
查询salary大于4000或者大于10000的记录数
>db.user.find({$or:[{$lt:4000}},{salary:{$gt:10000}}}]}).count()

###################################################
删除操作

删除整个集合中的所有数据
>db.wangshibo.find()
>db.wangshibo.remove({})
>db.wangshibo.find()
remove()函数接受一个查询文档作为可选参数来有选择性的删除符合条件的文档
不会删除集合本身,原有的索引页不会被删除。
删除文档是永久的,不能撤销,也不能恢复。
drop()是把集合相关的信息整个删除(包括索引)

删除集合中符合条件的所有记录
>db.user.find()
>db.user.remove({name:'GalGadot'})
>db.user.find()
删除集合中符合条件的一条记录
>db.user.find()
>db.user.remove({salary :{$1t:30000},1})
>db.user.find()
也可以将命令逗号后的1改成true

更新操作:
赋值更新:db.collection.update(criteria,objNew,upsert,multi)
criteria:update的查询条件,类似sql update查询内where后面的
objNew:update的对象和一些更新的操作符如$,$inc...等,可以理解为sql update查询内set后面的
upsert:如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入
multi:mongodb默认是false,只更新找到的第一条记录,如何参数是true,
就把条件查出来多条记录全部更新
>db.user.find()
>db.user.update({name:'huihui'},{$set:{age:23}},false,true)
>db.user.find()
>db.user.update({name:'lfqy1'},{$set:{age:23}},true,true)
>db.user.find()

增值操作
>db.user.find()
>db.user.updata({gender:'female'},{$inc:{salary:50}},false,true)
>db.user.find()





posted @ 2018-03-29 15:27  风中驻足  阅读(279)  评论(0编辑  收藏  举报