mongodb
1
)装包
[root@host50 ~]# tar -xzf mongodb-linux-x86_64-rhel70-3.6.3.tgz
[root@host50 bin]# mkdir /usr/local/mongodb
[root@host50 bin]# cd ..
[root@host50 mongodb-linux-x86_64-rhel70-3.6.3]# mv bin//usr/local/mongodb/
[root@host50 mongodb-linux-x86_64-rhel70-3.6.3]# cd /usr/local/mongodb/
[root@host50 mongodb]# ls
bin
[root@host50 mongodb]# mkdir etc
[root@host50 mongodb]# mkdir log
[root@host50 mongodb]# mkdir -p data/db
数据库目录(名称必须是这个)
2
)创建并修改配置文件
[root@host50 bin]# ./mongod --help
Options:
General options:
-h [ --help ] show this usageinformation
--version show versioninformation
-f [ --config ] arg configuration filespecifying
additional options
手动创建服务主配置文件
[root@bogon ~]# vim mongodb.conf
logpath=/usr/local/mongodb/log/mongodb.log
logappend=true #
追加的方式记录日志信息
dbpath=/usr/local/mongodb/data/db #
数据库目录
fork=true #
守护进程方式运行
[root@host50 mongodb]# vim etc/mongodb.conf
[root@host50 mongodb]# cat etc/mongodb.conf
dbpath=/usr/local/mongodb/data/db
fork=true
logpath=/usr/local/mongodb/log/mongodb.log
logappend=ture
使用命令不用绝对路径
[root@host50 mongodb]# vim /etc/profile
[root@host50 mongodb]# source /etc/profile
[root@host50 mongodb]# tail -1 /etc/profile
export PATH=/usr/local/mongodb/bin/:/usr/local/mysql/bin:$PATH
[root@host50 mongodb]# echo $PATH
/usr/local/mongodb/bin/:/usr/local/mysql/bin:/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
启动服务:
[root@host50 etc]# mongod -f /usr/local/mongodb/etc/mongodb.conf
about to fork child process, waiting until server is ready forconnections.
forked process: 2652
child process started successfully, parent exiting
[root@host50 log]# ss -nuplt | grep :27017
tcp LISTEN 0 128 127.0.0.1:27017 *:* users:(("mongod",pid=2652,fd=11))
[root@host50 log]# ps -C mongod
PID TTY TIME CMD
2652 ? 00:00:00 mongod
cd .
连接:
[root@host50 mongodb]# mongo
MongoDB shell version v3.6.3
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.3
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
.
.
.
2018-07-07T10:51:26.962+0800 I CONTROL [initandlisten]
> show dbs ###
看有多少库
admin 0.000GB
config 0.000GB
local 0.000GB
> db ####
查看当前所在库
test
修改登陆ip和port
[root@host50 mongodb]# vim etc/mongodb.conf
[root@host50 mongodb]# tail -2 etc/mongodb.conf
bind_ip=192.168.4.50
port=27050
[root@host50 mongodb]# mongod -f etc/mongodb.conf
about to fork child process, waiting until server is ready forconnections.
forked process: 3019
child process started successfully, parent exiting
[root@host50 mongodb]# ss -nuplt | grep :27050
tcp LISTEN 0 128 192.168.4.50:27050 *:* users:(("mongod",pid=3019,fd=11))
[root@host50 mongodb]# mongo --host 192.168.4.50 --port 27050
MongoDB shell version v3.6.3
connecting to: mongodb://192.168.4.50:27050/
exit
停服务:
[root@host50 etc]# mongod --shutdown -f mongodb.conf
killing process with pid: 1830
库管理命令: 查看 创建 切换 删除
– show dbs
查看已有的库
– db
显示当前所在的库
– use
库名 切换库,若库不存在的话 自动延时创建库
– show collections
或 show tables 查看库下已有的集合
– db.dropDatabase()
删除当前所在的库
数据库名可以是满足以下条件的任意 UTF-8 字符串。
–
不能是空字符串( "") 。
–
不得含有 ' ' (空格 ) 、 . 、 $ 、 / 、 \ 和 \0 ( 空字符)
。
–
应全部小写。
–
最多 64 字节。
集合管理命令:查看 创建 删除
– show collections
或 show tables # 查看集合
#
删除集合
– db.
集合名.drop()
– db.
集合名.save({'',''})
在时,创建并添加文档
> db.user.save({'name':'bob','age':'21'})
WriteResult({ "nInserted" : 1 })
#
创建集合,集合不存
> use studb
switched to db studb
> db
studb ######
创建集合
>db.c1.save({"name":"boa","age":18,"class":"nsd1803"})
WriteResult({ "nInserted" : 1 })
> db.c1.save({"name":"xielingyun","class":"nsd1803"})
WriteResult({ "nInserted" : 1 })
> db.c1.find() ########
查看集合
{ "_id" : ObjectId("5b4039e85aba90867680d773"),"name" : "boa", "age" : 18, "class" :"nsd1803" }
{ "_id" : ObjectId("5b4039fc5aba90867680d774"),"name" : "xielingyun", "class" :"nsd1803" }
文档管理命令: 查看 统计 添加 删除
– db.
集合名.find()
– db.
集合名.count()
– db.
集合名.insert({“name”:”jim”})
– db.
集合名 .find({ 条件})
– db.
集合名 .findOne() # 返回一条文档
– db.
集合名 .remove({}) # 删除所有文档
– db.
集合名 .remove({ 条件 }) # 删除与条件匹配的所有文档
字符 string/ 布尔 bool/ 空null
– UTF-8
字符串都可以表示为字符串类型的数据
– {name:”
张三” } 或{school:“tarena”}
布尔bool
–
布尔类型有两个值 true 和false ,{x:true}
空null
–
用于表示空值或者不存在的字段, {x:null}
数值 / 数组array
数值
– shell
默认使用 64 为浮点型数值。 {x :
3.14} 或{x : 3}
NumberInt ( 4
字节整数) {x:NumberInt(3)}
– NumberLong ( 8
字节整数) {x:NumberLong(3)}
> db.c1.save({name:"bob",x:NumberInt(3)})
WriteResult({ "nInserted" : 1 })
> db.c1.save({name:"jack",x:NumberInt(3.99)})
WriteResult({ "nInserted" : 1 })
> db.c1.find()
{ "_id" : ObjectId("5b4039e85aba90867680d773"),"name" : "boa", "age" : 18, "class" :"nsd1803" }
{ "_id" : ObjectId("5b4039fc5aba90867680d774"),"name" : "xielingyun", "class" :"nsd1803" }
{ "_id" : ObjectId("5b405efb5aba90867680d776"),"name" : "bob", "x" : 3 }
{ "_id" : ObjectId("5b405f095aba90867680d777"),"name" : "jack", "x" : 3 }
数组array
–
数据列表或数据集可以表示为数组
– {x : [“a“ ,“ b”,”c”]}
> db.c1.save({name:'yaya',bboy:['bj','ls','zs']})
WriteResult({ "nInserted" : 1 })
> db.c1.find({name:'yaya'})
{ "_id" : ObjectId("5b405f885aba90867680d778"),"name" : "yaya", "bboy" : [ "bj","ls", "zs" ] }
代码 / 日期 / 对象代码
–
查询和文档中可以包括任何 JavaScript 代码
– {x: function( ){/*
代码*/}}
> db.c1.save({
... Iname:"php",
... codeformat:function(){/* */}
... })
WriteResult({ "nInserted" : 1 })
>
日期
–
日期被存储为自新纪元依赖经过的毫秒数,不存储时区
– {x:new Date( )}
> db.c1.save({name:'xielingyun',brithday:new Date() })
WriteResult({ "nInserted" : 1 })
•
对象
–
对象 id 是一个 12 字节的字符串,是文档的唯一标识
– {x: ObjectId() }
> db.c1.save({name:"alice",stuid:ObjectId()})
WriteResult({ "nInserted" : 1 })
内嵌 / 正则表达式
文档可以嵌套其他文档,被嵌套的文档作为值来处理
> db.c1.save({
... ywzd:{p:'dmy',jg:69,v:2},ngsfc:{p:'bird',jg:89,v:3}})
WriteResult({ "nInserted" : 1 })
正则表达式
–
查询时,使用正则表达式作为限定条件
– {x:/
正则表达式/}
> db.c1.save({name:"hanmeimei",match:/^a/ })
WriteResult({ "nInserted" : 1 })
数据导出语法格式1
– #mongoexport [--host IP
地址 --port 端口]
-d
库名 -c 集合名 -f 字段名 1, 字段名2
--type=csv >
目录名 / 文件名.csv
•
语法格式2
– #mongoexport --host IP
地址 --port 端口
-
库名 -c 集合名 -q ‘{ 条件 }’ -f 字段名 1 ,字段名2
--type=csv >
目录名 / 文件名.csv
注意:导出为 csv 格式必须使用 -f 指定字段名列表!!!
[root@host50 ~]# mongoexport --host 192.168.4.50 --port 27050 -d studb -c c1 -f_id,name --type=csv > /root/monfodbdir/c1.csv
2018-07-07T16:33:45.906+0800 connectedto: 192.168.4.50:27050
2018-07-07T16:33:45.906+0800 exported10 records
语法格式3
#mongoexport [ --host IP
地址 --port 端口]
-d
库名 -c 集合名 [ -q ‘{ 条件 }’ –f 字段列表]
--type=json >
目录名 / 文件名.json
[root@host50 mongodb]# mongoexport --host 192.168.4.50 --port 27050 -d studb -cc1 --type=json > /root/mongodbdir/c1.txt
后面不指定路径名就输出到当前屏幕
数据导入
•
语法格式1
– #mongoimport –host IP
地址 – port 端口
-d
库名 – c 集合名
--type=json
目录名 / 文件名.json
[root@host51 ~]# mongoimport --host 192.168.4.51 --port 27051 -d bbsdb -c t1--type=json /root/monfodbdir/c1.txt
2018-07-07T16:23:43.757+0800 connectedto: 192.168.4.51:27051
2018-07-07T16:23:43.891+0800 imported10 documents
[root@host51 ~]#
•
语法格式2
– #mongoimport –host IP
地址 – port 端口
-d
库名 – c 集合名
--type=csv --headerline [--drop]
目录名 / 文件名.c
sv
注意:导入数据时库和集合不存在时,会创建库和集合后导入数据反之以追加的方式导入数据到集合里,使用— drop 选项可以删除原有数据后导入新数据 --headerline 忽略标题
[root@host51 monfodbdir]# mongoimport --host 192.168.4.51 --port 27051 -d bbsdb-c t2 -f _id,name --type=csv /root/monfodbdir/c1.csv
2018-07-07T16:46:14.859+0800 connectedto: 192.168.4.51:27051
2018-07-07T16:46:15.564+0800 imported11 documents
[root@host51 monfodbdir]# mongoimport --host 192.168.4.51 --port 27051 -d bbsdb-c t1 --headerline --drop --type=csv/root/monfodbdir/c1.csv ######t1
本身有数据
2018-07-07T17:00:41.899+0800 connectedto: 192.168.4.51:27051
2018-07-07T17:00:41.900+0800 dropping:bbsdb.t1
2018-07-07T17:00:42.278+0800 imported10 documents
练习将/etc/passwd导入mongodb
> db.c3.save({
... name:'yaya',
... password:'x',
... uid:88888
... gid:999999,
... comment:'teacher',
... homedir:'/home/yaya',
... shell:'/bin/bash'})
WriteResult({ "nInserted" : 1 })
>
[root@host50 ~]# mongoexport --host 192.168.4.50 --port 27050 -d test -c c3 -fname,password,uid,gid,comment,homedir,shell --type=csv >/root/monfodbdir/c4.csv
2018-07-07T17:34:21.899+0800 connectedto: 192.168.4.50:27050
2018-07-07T17:34:21.900+0800 exported 1record
制作csv格式文件,mongodb只能读scv,json格式
[root@host50 monfodbdir]# cp /etc/passwd ./
[root@host50 monfodbdir]# ls
c1.csv c1.txt c3.csv c4.csv passwd
[root@host50 monfodbdir]# sed -i '$r passwd' c4.csv
[root@host50 monfodbdir]# vim c4.csv
[root@host50 monfodbdir]# sed -i 's/:/,/g' c4.csv
[root@host50 monfodbdir]# vim c4.csv
导入:
[root@host50 monfodbdir]# mongoimport --host 192.168.4.50 --port 27050 -d test -c c3 --headerline --drop--type=csv /root/monfodbdir/c4.csv
2018-07-07T17:44:19.202+0800 connectedto: 192.168.4.50:27050
2018-07-07T17:44:19.203+0800 dropping:test.c3
2018-07-07T17:44:19.444+0800 imported43 documents
数据备份
•
备份数据所有库到当前目录下的 dump 目录下
# mongodump [ --host ip
地址 --port 端口]
[root@host50 mongodb]# mongodump --host 192.168.4.50 --port 27050
2018-07-07T17:52:49.100+0800 writingadmin.system.version to
2018-07-07T17:52:49.100+0800 donedumping admin.system.version (1 document)
2018-07-07T17:52:49.100+0800 writingtest.c3 to
2018-07-07T17:52:49.100+0800 writingstudb.c1 to
2018-07-07T17:52:49.101+0800 donedumping test.c3 (43 documents)
2018-07-07T17:52:49.101+0800 donedumping studb.c1 (10 documents)
[root@host50 mongodb]# ls
bin data dump etc log
备份时指定备份的库和备份目录
# mongodump [ --host ip
地址 --port 端口 ] -d 数据库名
-c
集合名 -o 目录
[root@host50 mongodb]# mkdir /backmongo
[root@host50 mongodb]# mongodump --host 192.168.4.50 --port 27050 -d test -c c3-o /backmongo
[root@host50 backmongo]# ls
test
[root@host50 backmongo]# cd test/
[root@host50 test]# ls
c3.bson c3.metadata.json
[root@host50 test]#
查看 bson 文件内容
#bsondump ./dump/bbs/t1.bson
数据恢复
•
语法格式
– mongorestore --host IP
地址 --port 端口 -d 数据库名 [ -c 集合名 ] 备份目录名
[root@host50 test]# mongorestore --host 192.168.4.50 --port 27050 -d test -c c4/bakmongo/test/c3.bson
2018-07-07T18:03:40.018+0800 Failed:mongorestore target '/bakmongo/test/c3.bson' invalid: stat/bakmongo/test/c3.bson: no such file or directory
[root@host50 test]# mongorestore --host 192.168.4.50 --port 27050 -d test -c c4/backmongo/test/c3.bson
2018-07-07T18:03:49.609+0800 checkingfor collection data in /backmongo/test/c3.bson
2018-07-07T18:03:49.610+0800 readingmetadata for test.c4 from /backmongo/test/c3.metadata.json
2018-07-07T18:03:49.830+0800 restoringtest.c4 from /backmongo/test/c3.bson
2018-07-07T18:03:49.893+0800 no indexesto restore
2018-07-07T18:03:49.893+0800 finishedrestoring test.c4 (43 documents)
2018-07-07T18:03:49.893+0800 done
ngqH��@�|