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}}}
])

 

posted @   潇潇暮鱼鱼  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示