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服务正常启动
/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/}})
正则表达式匹配