------------恢复内容开始------------
软件下载,版本选择
https://www.mongodb.com/try/download/community
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.0.23.tgz
1、系统准备
(1)redhat或cnetos6.2以上系统
(2)系统开发包完整
(3)ip地址和hosts文件解析正常
(4)iptables防火墙&SElinux关闭
(5)关闭大页内存机制
########################################################################
root用户下
在vi /etc/rc.local最后添加如下代码 if test -f /sys/kernel/mm/transparent_hugepage/enabled; then echo never > /sys/kernel/mm/transparent_hugepage/enabled fi if test -f /sys/kernel/mm/transparent_hugepage/defrag; then echo never > /sys/kernel/mm/transparent_hugepage/defrag fi echo never > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/defrag
其他系统关闭参照官方文档:
https://docs.mongodb.com/manual/tutorial/transparent-huge-pages/
修改 vim /etc/security/limits.conf #* - nofile 65535 2、mongodb安装 (1)创建所需用户和组 useradd mongod passwd mongod (2)创建mongodb所需目录结构 mkdir -p /mongodb/conf mkdir -p /mongodb/log mkdir -p /mongodb/data 解压: tar xf mongodb-linux-x86_64-rhel70-4.0.23.tgz cp -r mongodb-linux-x86_64-rhel70-4.0.23.tgz/bin/ /mongodb/ (4)设置目录结构权限 chown -R mongod:mongod /mongodb (5)设置用户环境变量 su - mongod vi .bash_profile export PATH=/mongodb/bin:$PATH source .bash_profile (6)启动mongodb su - mongod mongod --dbpath=/mongodb/data --logpath=/mongodb/log/mongodb.log --port=27017 --logappend --fork 关闭mongodb mongod -f /mongodb/conf/mongodb.conf --shutdown 使用配置文件启动mongodb mongod -f /mongodb/conf/mongodb.conf
配置文件详情
(YAML模式:) -- NOTE: YAML does not support tab characters for indentation: use spaces instead. --系统日志有关 systemLog: destination: file path: "/mongodb/log/mongodb.log" --日志位置 logAppend: true --日志以追加模式记录 --数据存储有关 storage: journal: enabled: true dbPath: "/mongodb/data" --数据路径的位置 -- 进程控制 processManagement: fork: true --后台守护进程 pidFilePath: <string> --pid文件的位置,一般不用配置,可以去掉这行,自动生成到data中 --网络配置有关 net: bindIp: <ip> -- 监听地址,如果不配置这行是监听在0.0.0.0 port: <port> -- 端口号,默认不配置端口号,是27017 -- 安全验证有关配置 security: authorization: enabled --是否打开用户名密码验证
配置文件
cat > /mongodb/conf/mongo.conf <<EOF systemLog: destination: file path: "/mongodb/log/mongodb.log" logAppend: true storage: journal: enabled: true dbPath: "/mongodb/data/" processManagement: fork: true net: port: 27017 bindIp: 10.0.0.53,127.0.0.1 EOF mongod -f /mongodb/conf/mongodb.conf --shutdown 使用配置文件启动mongodb mongod -f /mongodb/conf/mongodb.conf 连接MongoDB mongo > show databases; 或者 show dbs
systemclt 管理
cat > /etc/systemd/system/mongod.service <<EOF [Unit] Description=mongodb After=network.target remote-fs.target nss-lookup.target [Service] User=mongod Type=forking ExecStart=/mongodb/bin/mongod --config /mongodb/conf/mongo.conf ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/mongodb/bin/mongod --config /mongodb/conf/mongo.conf --shutdown PrivateTmp=true [Install] WantedBy=multi-user.target EOF pkill mongod systemctl restart mongod systemctl stop mongod systemctl start mongod
数据库:
增
#如果数据库不存在,则创建并切换到该数据库,存在则直接切换到指定数据库。(库下未创建数据时,只生成一个临时库,查看库时不显示)
use data
删
use data #需要先切换到指定的库
db.dropDatabase() #删除当前库
查
show dbs 或 show databases
集合(表)
增 use table1 #创建空集合
db.table1.insert({'a':1}) #创建集合并插入当前数据
删
db.table1.drop()
查
show collections #查看库中的集合
show tables
db #查看当前所在的库
文档操作(数据行)
增 单条插入
db.table1.insert({id:11,name:"张三"})
批量插入
user1={
"_id":1,
"name":"alex",
"age":10,
'hobbies':['music','read','dancing']
}
user2={
"_id":2,
"name":"wupeiqi",
"age":20,
'hobbies':['music','read','run']
}
user3={
"_id":3,
"name":"yuanhao",
"age":30,
'hobbies':['music','drink']
}
db.user.insertMany([user1,user2,user3])
for循环批量插入数据
for(i=0;i<10000;i++){db.log.insert({"uid":i,"name":"mongodb","age":6,"date":newDate()})}
删
#1、删除符合条件的第一个文档
db.user.deleteOne({ 'age': 8 })#第一个包含有 'age': 8的文档
#2、删除符合条件的全部
db.user.deleteMany( {'addr.country': 'China'} ) #只要有内嵌文档,且内容含有country': 'China'的全都删除
db.user.deleteMany({"_id":{"$gte":3}})#删除id大于等于3的所有
#3、删除全部
db.user.deleteMany({}) #等于是清空该集合(表)
查
查的形式有很多,如比较运算、逻辑运算、成员运算、取指定字段、对数组的查询、使用正则、获取数量,还有排序、分页等等。下面我们针对十种查的形式进行详细说明。
注:在MongoDB中,用到方法都得用 $ 符号开头
比较运算:=,!= ('$ne') ,> ('$gt') ,< ('$lt') ,>= ('$gte') ,<= ('$lte')
#1、select * from db1.user where id = 3
db.user.find({"_id":3})
#2、select * from db1.user where id != 3
db.user.find({"_id":{"$ne":3}})
逻辑运算:MongoDB中字典内用逗号分隔多个条件是and关系,或者直接用$and,$or $not(与或非)
#1 select * from db1.user where id >=3 and id <=4;
db.user.find({"_id":{"$gte":3,"$lte":4}})
#2 select * from db1.user where id >=3 and id <=4 and age >=40;
db.user.find({
"_id":{"$gte":3,"$lte":4},
"age":{"$gte":40}
})
db.user.find({"$and":[
{"_id":{"$gte":3,"$lte":4}},
{"age":{"$gte":40}}
]})
成员运算:成员运算无非in和not in,MongoDB中形式为$in , $nin
#1、select * from db1.user where age in (20,30,31);
db.user.find({"age":{"$in":[20,30,31]}})
#2、select * from db1.user where name not in ('alex','yuanhao');
db.user.find({"name":{"$nin":['Stefan','Damon']}})
正则:正则定义在/ /内
# MongoDB: /正则表达/i
#1、select * from db1.user where name regexp '^j.*?(g|n)$';
db.user.find({'name':/^j.*?(g|n)$/i})#匹配规则:j开头、g或n结尾,不区分大小写
对查询结果进行排序:sort() 1代表升序、-1代表降序
db.user.find().sort({"name":1,})
db.user.find().sort({"age":-1,'_id':1})
其他查找
db.user.find() #等同于db.user.find({})
db.user.find().pretty() #显示josn格式
#2、去重
db.user.find().distinct()
– 查询集合中的记录数
app> db.log.find() //查询所有记录
注:默认每页显示20条记录,当显示不下的的情况下,可以用it迭代命令查询下一页数据。
设置每页显示数据的大小:
> DBQuery.shellBatchSize=50; //每页显示50条记录
db.log.findOne() //查看第1条记录
db.log.count() //查询总的记录数
– 删除集合中的记录数
db.log.remove({}) //删除集合中所有记录
db.log.distinct("name") //查询去掉当前集合中某列的重复数据
– 查看集合存储信息
db.log.stats()
db.log.dataSize() //集合中数据的原始大小
db.log.totalIndexSize() //集合中索引数据的原始大小
db.log.totalSize() //集合中索引+数据压缩存储之后的大小 *****
db.log.storageSize() //集合中数据压缩存储的大小
改
#update() 方法用于更新已存在的文档。语法格式如下:
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
#参数说明:对比update db1.t1 set name='EGON',sex='Male' where name='egon' and age=18;
"""
query : 相当于where条件。
update : update的对象和一些更新的操作符(如$,$inc...等,相当于set后面的
upsert : 可选,默认为false,代表如果不存在update的记录则不更新也不插入,设置为true代表不存在则添加。
multi : 可选,默认为false,代表只更新找到的第一条记录,设为true时,代表更新找到的全部记录。
writeConcern :可选,抛出异常的级别。
"""
#更新操作是不可分割的:若两个更新同时发送,先到达服务器的先执行,然后执行另外一个,不会破坏文档。
#设数据为{'name':'武松','age':18,'hobbies':['做煎饼','吃煎饼','卖煎饼'],'addr':{'country':'song','province':'shandong'}}
#update db1.user set age=23,name="武大郎" where name="武松";
#1、覆盖式
db.user.update(
{"name":"武松"},
{"age":23,"name":"武大郎"}
)
#得到的结果为{"age":23,"name":"武大郎"}
#2、局部修改:$set
db.user.update(
{"name":"武松"},
{"$set":{"age":15,"name":"潘金莲"}}
)
#得到的结果为{"name":"潘金莲","age":15,'hobbies':['做煎饼','吃煎饼','卖煎饼']}
#3、改多条:将multi参数设为true
db.user.update(
{"_id":{"$gte":1,"$lte":2}},
{"$set":{"age":53,}},
{"multi":true}
)
#4、有则修改,无则添加:upsert参数设为true
db.user.update(
{"name":"EGON"},
{"$set":{"name":"EGON","age":28,}},
{"multi":true,"upsert":true}
)
#5、修改嵌套文档:将国家改为日本
db.user.update(
{"name":"潘金莲"},
{"$set":{"addr.country":"Japan"}}
)
#6、修改数组:将第一个爱好改为洗澡
db.user.update(
{"name":"潘金莲"},
{"$set":{"hobbies.1":"洗澡"}}
)
#删除字段:不要爱好了
db.user.update(
{"name":"潘金莲"},
{"$unset":{"hobbies":""}}
)
浙公网安备 33010602011771号