------------恢复内容开始------------
软件下载,版本选择
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":""}} )
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!