mongodb数据库
1.在k8s安装mongo数据库时,新版本(测试为7.0.2版本)的mongo的根用户和根用户密码的环境变量变了,现在是
MONGODB_ROOT_USER和MONGODB_ROOT_PASSWORD
而不是之前的MONGO_INITDB_ROOT_USERNAME和MONGO_INITDB_ROOT_PASSWORD使用这两个环境变量会认证失败。
2.mongo的安装
镜像使用bitnami/mongodb:7.0.2
2.1将配置文件写为cm
mongodb.conf # mongod.conf # for documentation of all options, see: # http://docs.mongodb.org/manual/reference/configuration-options/ # where and how to store data. storage: #数据库数据文件 dbPath: /bitnami/mongodb/data/db directoryPerDB: false # where to write logging data. systemLog: destination: file quiet: false logAppend: true logRotate: reopen path: /opt/bitnami/mongodb/logs/mongodb.log verbosity: 0 # network interfaces net: port: 27017 unixDomainSocket: enabled: true pathPrefix: /opt/bitnami/mongodb/tmp ipv6: false #全部ip可链接 bindIpAll: true #bindIp: # replica set options #replication: #replSetName: replicaset #enableMajorityReadConcern: true # sharding options #sharding: #clusterRole: # process management options processManagement: fork: false pidFilePath: /opt/bitnami/mongodb/tmp/mongodb.pid # set parameter options setParameter: enableLocalhostAuthBypass: true # security options security: #开启账户认证 authorization: enabled
挂载cm
2.2使用secret配置管理账户的账户名与密码
在配置deploy时使用secretkey添加env
2.3在pod启动完成后,进入容器内进行认证测试
#启动客户端 mongosh #切换数据库 use admin #账户认证 db.auth("username","password")
3.mongo的使用
3.1用户管理
创建用户
其中user和pwd对应的是字符串,roles对应的是对象,每个角色role对应着一个数据库,如果role中有any时 如readAnyDB时,db应该用admin,表示对所有数据库有读权限,如果db为其他数据库,则只对那一个数据库有权限。mongo语句是大小写敏感的,若写做db.createUser(),则会报错TypeError: db.createuser is not a function
db.createUser({user:"zhl",pwd:"xi67552",roles:[{role:"root",db:"admin"}]})
3.2数据库操作
创建数据库
使用use 数据库名进行切换数据库,当数据库不存在时会创建并切换
use test
删除数据库
在进入数据库 use test后,执行下列代码就会删除当前库
db.dropDatabase()
查看数据库
show dbs
3.3集合的操作
在mongo中集合就相当于是数据库的概念
创建集合
db.createCollection("item")
在创建集合时,不能将文档作为第二个参数传递,但是可以使用以下代码创建c4表并插入数据"age":12和"age",15
db.c4.insert([{"age": 12}{"age",15}])
insertOne和insertMany分别表示插入一条和多条,而insert不限制插入的条数
保存集合数据,只能更新单条数据,不能做批量操作
db.c6.save([{"name":"wangwu"}])
查看集合
use test 切换到test集合,然后查看
show tables/show collections
查看集合详情
db.c4.stats()
查看集合中所有的数据
db.c6.find()
删除集合
先切换到数据库 然后删除集合c2
db.c2.drop()
3.4数据操作
更新数据 set
修改数据update,有的字段,修改字段,没有的字段添加字段。第一个{}表示匹配的条,相当于where,里面可以写条件,如果是空则匹配所有的条
db.c6.update({}, {"$set": {"name":"set","age":30}})
当第一个{}不为空是,匹配到的是符合里面语句的条,然后修改其payment字段
db.item.update( {"title":"o1"},{$set:{"payment":10086}} )
三参数情况
第三个{"multi":true}表示多次匹配,如果不加 默认只匹配第一条
db.c6.update({},{$set: {"name":"set","age":3}},{"multi":true})
四参数情况
上面的"multi":true此时变成第四个参数multi:true,而第三个参数upsert:true代表如果匹配到做修改,如果没匹配到做新增,这两个参数默认都是false
db.c6.update({"name": "lism"},{$set: {"age":3}},true,true)
删除数据 unset
删除的是字段,即使匹配到的是"name":"abc"也会被删除,因为他的value这里是一个占位符,删除的是属性和他的值,而写的时候不用指定,写什么都行,只是为了完整性
db.c6.update({}, {"$unset": {"name": 0}})
添加数据 push
push只能向已存在的是数组类型属性中插入数据,而不能像string int等类型里填加,若是没有的属性会新加属性
db.c6.update({}, {"$push": {"hobby":"acd"}})
查询数据 find
筛选年龄大于10的
db.c6.find({"age":{"$gt":10}})
正则匹配
以a开头的 i表示忽略大小写,m为锚点,把回车换号变成多行再进行匹配
db.c6.find({"name":{"$regex":/^a/im}})
查询后排序
按照年龄升序排序
db.c6.find({},{"name":1,"age":1}).sort({"age":1})
降序排序,指定排序字段为-1
db.c6.find({},{"name":1,"age":1}).sort({"age":-1})
分页功能,跳过多少行显示多少行
db.c6.find({},{"name":1,"age":1}).sort({"age":1}).skip(2).limit(2)
3.5聚合函数
sum函数
插入数据
db.item.insert([ {"title":"o1","payment":100}, {"title":"o2","payment":120}, {"title":"o3","payment":119}, {"title":"o4","payment":110}, {"title":"o5","payment":999} ])
求行数
其中$group为分组函数,第一个参数为"_id":null为不分组即一组有全部的5行数据,第二个参数别称起为count,count为给1求和。
db.item.aggregate([ {"$group":{"_id":null, "count":{"$sum":1}}} ])
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?