背景
搭建数据库测试环境(任何时候都需要按照官网的标准进行)
依赖
#版本4.2.8 tar包安装
使用以下命令安装MongoDB社区.tgz tarball 所需的依赖项:
yum -y install libcurl openssl
yum -y install libcurl openssl --allowerasing
#添加环境变量
PATH=/usr/local/mongodb4.2.8/bin:$PATH
编译安装使用到的配置文件
mongod -f /usr/local/mongodb4.2.8/mongodb.conf &
# cat /usr/local/mongodb4.2.8/mongodb.conf
port=27017
dbpath=/data/data/
logpath=/data/log/mongodb.log
#fork=true
logappend=true
shardsvr=true
directoryperdb=true
#auth=true
启动
mongod --dbpath /data/data/ --logpath /data/log/mongod.log --fork
about to fork child process, waiting until server is ready for connections.
forked process: 291
child process started successfully, parent exiting
端口
lsof -i:27017
ps -ef|grep 291
进入控制台
mongo
复制集
官网截图(大概意思类似主从,实现读写分离。优点可以自动切换)
启动方式:(或是-f) 重点是配置文件
编译安装没有配置文件:从rpm安装的主机上复制一份,并修改数据和日志目录位置
#验证命令
mongod --config /data/data/mongod.conf &
ps -ef|grep mongod
如果要搭建复制集(需要添加--replSet rs0 (rs0为名称) )
mongod --config /data/data/mongod.conf --replSet rs0 &
只在主节点上:
配置文件
rs.config = {_id:"rs0",members:[ {_id:0,host:"192.168.68.60:27017"},
{_id:1,host:"192.168.68.61:27017"}, {_id:2,host:"192.168.68.62:27017",
arbiterOnly:true} ] }
初始化
rs.initiate({_id : "rs0", members : [{_id : 0, host : "192.168.68.60:27017"},]})
添加
rs.add("192.168.68.61:27017")
rs.add("192.168.68.62:27017")
查看 ("ok" : 1,)才是正常的 目前是一主两从(PRIMARY ;SECONDARY )
rs.status()
rs.isMaster()
db.hostInfo() #主机信息
移除
rs.remove("192.168.68.61:27017")
测试
切换:
将Primary节点降级为Secondary节点 rs.stepDown()
手动指定时间
myapp:PRIMARY> rs.stepDown(30)
主节点的提示符:
rs0:PRIMARY>
从节点提示符:
rs0:SECONDARY>
重点:配置完成之后从库(SECONDARY节点)需要执行rs.slaveOk() 才可以提供读服务show dbs
补充
启动服务:
/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/conf/mongo.conf &
关闭:
/usr/local/mongodb/bin/mongod --shutdown --config /usr/local/mongodb/conf/mongo.conf
netstat -antpl | grep 27017
登录(如果你开启看密码认证,就需要用到admin库)
方法一 use admin
db.auth('root','密码');
方法二 mongo --host 192.168.1.66:27017 -u root -p 密码 --authenticationDatabase admin
推荐方式:URI (这种也是程序的登录方式,可以自动寻找主库进行读写)
mongodb://dbabd:admin@192.168.90.111:27017,192.168.90.112:27017,
192.168.90.113:27017/?authSource=admin&replicaSet=rs0 (rs0为复制集名)
简单的CRUD
show databases = show dbs
use 库名 进库 之后db. stats () //统计数据信息
show collections 看表
>use test
>db.getCollectionNames () //查询当前数据下所有的集合名称
db.createCollection('table01') 建表
db.table01.drop() 删除表
db.user00.insert({'name':'lei','age':18}) 插入1条数据 在 MongoDB 中,当插入文档时,如果集合不存在,则 MongoDB 会隐式地自动创建集合,
WriteResult({ "nInserted" : 1 })
db.user00.find() 查看表
db.user00.insert({_id:1,'name':'lei','age':18})
rs0:PRIMARY> db.user00.find()
{ "_id" : ObjectId("5f342016772920173f6ea2b2"), "name" : "lei", "age" : 18 }
{ "_id" : 1, "name" : "lei", "age" : 19 } 自定义_id (不建议)
插入3条数据
db.user00.insert([
{"name":"lei1","age":1},
{"name":"lei2","age":2},
{"name":"lei3","age":3}
])
插入N条数据
for (var i=1;i<=10;i++){
db.user00.insert({"name":"a"+i,"age":i})
}
db.user00.find().sort({name: 1}) //查询并排序
>db.test.find().limit(3)
创建单键索引的语法结构如下:
>db.collection.createlndex ( { key: 1 } ) //1 为升序,-1 为降序
复合索引可以支持在多个字段上进行的匹配查询,语法结构如下:
db.collection.createIndex ({ <key1> : <type>, <key2> : <type2>, ...})
需要注意的是,在建立复合索引的时候一定要注意顺序的问题,顺序不同将导致查询的结果也不相同。
如下语句创建复合索引:
>db.records.createIndex ({ "score": 1, "location.state": 1 })
查看复合索引的查询计划的语法如下:
>db.records.find({score:1034, "location.state" : "NY"}).explain()
本文说明,主要技术内容来自互联网技术大佬的分享,还有一些自我的加工(仅仅起到注释说明的作用)。如有相关疑问,请留言,将确认之后,执行侵权必删