ubuntu安装mongod、配置用户访问、添删改查

本文详细介绍了在Ubuntu系统上安装MongoDB6.0,包括添加公钥、配置源列表、安装步骤,以及启动、验证、安全配置、用户管理、数据库操作(如创建、查询、修改、删除)和使用聚合功能的基础教程。

1、安装

1.1包管理公钥导入

wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -

执行结果截图如下:

1.2创建列表文件

lsb_release -dc

 

 根据你的Codename 来修改下方对应的命令,如果你的是jammy,就修改为jammy,如果是focal就修改为focal

echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list

执行结果如下:

1.3更新软件包列表

sudo apt-get update

 

1.4安装

sudo apt-get install -y mongodb-org

 2、启动测试

2.1、启动

sudo systemctl start mongod

2.2、验证是否启动成功

sudo systemctl status mongod

执行结果如下:

2.3其它命令

# 停止
sudo systemctl stop mongod
# 重启
sudo systemctl restart mongod

# 卸载
# 停止
sudo service mongod stop
# 删除包
sudo apt-get purge mongodb-org*
# 删除数据目录
sudo rm -r /var/log/mongodb
sudo rm -r /var/lib/mongodb

2.4配置用户名密码、端口

将/usr/bin配置到PATH中

root@VM-8-10-ubuntu:/usr/bin# ./mongosh

db.createUser({user:"hmblogs",pwd:"密码保密",roles:["root"]})

db.auth('hmblogs','密码保密')

然后使用eixt退出。

配置访问mongo必须要输入用户名密码,且能外网访问

vi /etc/mongod.conf

 此时mongo服务已无法启动成功

搜索资料发现有个方案,尝试后,mongo服务正常启动

/etc/mongod.conf配置如下:

security:
  authorization: enabled

使用用户名密码登录:

./mongosh -u hmblogs -p

尝试不使用用户名登录:

发现还是可以进去。 但是已经连查看库的权限都没有了。

2.5个人电脑本地使用客户端连接

推荐下载Robo 3T

连接成功,可以继续使用了。

2.6、使用该root权限的账号,在admin库中,创建一个库,报错了,截图如下:

 报错内容如下:

Failed to create database 'xx'.

Error:
GetLastError command failed: getLastError command is not supported

2.7数据库

创建数据库

use hmblogs

如果存在则切换,如果不存在则创建数据库。

2.8操作集合

2.8.1集合新增数据

db.getCollection('Student').insert({"id":1,"name":"he",age:18})

db.getCollection('Student').insertOne({"id":2,"name":"zhangsan",age:22})

db.getCollection('Student').insertMany([{"id":3,"name":"lisi",age:23},{"id":4,"name":"wangwu",age:23}])

2.8.2集合修改数据

把已经存在的document内容复制出来,放在insert()里面

db.getCollection('Student').insert({"_id" : ObjectId("65bb70f5d50fd63eeca8f059"),"id" : 1,"name" : "he","age" : 18})

执行会报错,如下所示:

如果改成save,预期会修改该条数据:

db.getCollection('Student').save({"_id" : ObjectId("65bb70f5d50fd63eeca8f059"),"id" : 1,"name" : "he","age" : 22}

发现不行。

a.  $set修改器,添加属性以及对应的值,如果key存在则修改对应的值,否则添加属性以及对应的值

db.Student.updateOne({id:3},{"$set":{"sex":"nan"}})

然后查看数据

b.  $unset修改器,去掉属性以及对应的值

db.Student.updateOne({id:3},{"$unset":{"sex":"nan"}})

c、$inc增加或者减少某个值

db.Student.updateOne({id:3},{"$inc":{"age":-3}})

年龄减少3岁

d、$push会在已有的数组末尾添加一个元素,如果没有则新增一个数组

db.Student.updateOne({id:3},{"$push":{"comments":{"advantage":"xxxxxxxxxx"}}})

然后查看数据

再次执行,看是否会追加新属性到数组后面

db.Student.updateOne({id:3},{"$push":{"comments":{"disadvantage":"缺点多"}}})

2.8.3查询文档

db.Student.find()

 查询数据,则find()括号中的参数,则是json格式

 

2.8.4删除文档

db.Student.remove({_id: ObjectId('65bb70f5d50fd63eeca8f059')})

db.Student.deleteOne({_id: ObjectId('65bb7113e74e91b7b63055a5')})

2.8.5upsert使用

db.getCollection('Student').updateOne({"id":2},{"$set":{"name":"zhangsan",age:77}},true)

前面2个参数,参考修改那节,第三个参数是可选的,默认为false只修改数据不会添加数据。我这里写成了true,则表示,如果根据第一个参数能找到记录则修改对应的数据,否则就添加一条数据。

修改情况:

 添加情况:

db.getCollection('Student').updateOne({"id":8},{"$set":{"name":"zhangsan8",age:88}},true)

注意,此时根据id为8查不出数据的:

这是为什么呢,没有达到预期效果。

2.8.6排序

在 MongoDB 中使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。

2.8.7分页

在 MongoDB 中使用 limit()方法来读取指定数量的数据,skip()方法来跳过指定数量的数据

2.8.8In查询

db.Student.find({age:{"$in":[20,23]}})

2.8.9count

db.Student.find({age:{"$gte":20}}).count()

2.8.10or查询

db.Student.find({"$or":[{"age":20},{"age":23}]})

2.8.11aggregate聚合

MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 count(*)、sum(*)这些。

db.Student.aggregate([{"$group":{"diffSex":"$sex","sextotal":{$sum:1}} }])

需求1:按性别分组,统计男生人数、女生人数。

参考网上部分博客写的,运行报错了,如下所示:

MongoServerError: The field 'diffSex' must be an accumulator object

网上搜查资料发现:分组的参数的key一定要是"_id",不然会报错:“The field ‘xxx’ must be an accumulator object”

db.Student.aggregate([{"$group":{"_id":"$sex","sextotal":{$sum:1}} }])

需求2:按性别分组,统计男生的年龄和、女生年龄和。

db.Student.aggregate([{"$group":{"_id":"$sex","sextotal":{$sum:"$age"}} }])

需求3:按性别分组,统计男生的平均年龄、女生平均年龄。

db.Student.aggregate([{"$group":{"_id":"$sex","sextotal":{$avg:"$age"}} }])

2.8.12模糊查询

db.Student.find({name:{$regex:"he"}})

db.Student.find({name:{$regex:/^he/}})

正则表达式匹配

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值