【大数据存储与处理】实验五 Python 操作 MongoDB

实验五 Python 操作 MongoDB

【实验目的】:

  1. 完成 python 操作 mongodb。

  2. 掌握 pymongo 安装配置过程。

【实验内容与要求】:

安装 pymongo 方法一:

cd /home/hadoop/myshare/pymongo-3.10.1.tar.gz

tar zxvf pymongo-3.10.1.tar.gz

mv pymongo-3.10.1 /home/app/pymongo

cd /home/app/pymongo

python setup.py install

安装 pymongo 方法二:

pip install pymongo

题目一:编写 python 程序

安装方法二:

首先下载 pymongo 包:

python3 -m pip install pymongo

创建 python 文件,命名为 pyinsert.py

pyinsert.py 中编写如下代码:

python 复制代码
from pymongo import MongoClient
from random import randint

name1 = ["yang ", "li ", "zhou "]
name2 = [
    "chao",
    "hao",
    "gao",
    "qi gao",
    "hao hao",
    "gao gao",
    "chao hao",
    "ji gao",
    "ji hao",
    "li gao",
    "li hao",
]

provinces = [
    "guang dong",
    "guang xi",
    "shan dong",
    "shan xi",
    "he nan"
]
client = MongoClient('mongodb://192.168.226.132:27017/')
db = client.student
sm = db.smessage
sm.delete_many({})
for i in range(1, 100):
    name = name1[randint(0, 2)] + name2[randint(0, 10)]
    province = provinces[randint(0, 4)]
    new_student = {
        "name": name,
        "age": randint(1, 30),
        "province": province,
        "subject": [
            {"name": "chinese", "score": randint(0, 100)},
            {"name": "math", "score": randint(0, 100)},
            {"name": "english", "score": randint(0, 100)},
            {"name": "chemic", "score": randint(0, 100)},
        ]}
    print(new_student)
    sm.insert_one(new_student)
print(sm.count_documents({}))

执行 py 代码

切换至 pyinsert.py 所在目录下,执行以下命令:

python3 pyinsert.py

查看插入的数据

db.smessage.findOne()

题目二:在 mongodb shell 终端查询

查询广东学生的平均年龄。

db.smessage.aggregate({match: {province: "guang dong"}},{group: { _id: "$province",

age:{avg:"age"}}})

查询所有省份的平均年龄。

db.smessage.aggregate({group: { _id: "province", age:{avg:"age"}}})

查询广东省所有科目的平均成绩。

db.smessage.aggregate({match: {province: "guang dong"}},{unwind: "subject"},{group:

{ _id: {province:"province",sujname:"subject.name"}, per:{avg:"subject.score"}}})

在题目 2 的基础上进行排序。

db.smessage.aggregate({$match: {province: "guang

dong"}},{unwind:"subject"},{group:{ _id:{province:"province",sujname:"$subject.name"},

per:{avg:"subject.score"}}},{$sort:{per:1}})

查询结果如图所示:

题目三:编写 python 程序

首先下载 pymongo 包:

python3 -m pip install pymongo

创建 python 文件,命名为 pybbs.py

pybbs.py 中编写如下代码:

python 复制代码
from pymongo import MongoClient
from random import randint

name = [
    'yangx',
    'yxxx',
    'laok',
    'kkk',
    'ji',
    'gaoxiao',
    'laoj',
    'meimei',
    'jj',
    'manwang',
]
title = [
    '123',
    '321',
    '12',
    '21',
    'aaa',
    'bbb',
    'ccc',
    'sss',
    'aaaa',
    'cccc',
]

client = MongoClient('mongodb://192.168.226.132:27017/')
db = client.test
bbs = db.bbs
bbs.delete_many({})  # Remove all documents from the collection

for i in range(1, 10000):
    na = name[randint(0, 9)]
    ti = title[randint(0, 9)]
    newcard = {
        'author': na,
        'title': ti,
    }
    bbs.insert_one(newcard)

print(bbs.count_documents({}))  # Count the number of documents in the collection

查看插入的数据

db.bbs.findOne()

题目四:在 mongodb shell 终端查询

查询每条记录的作者。

db.bbs.aggregate({"$project":{"author":1}})

用 group 将作者名称分组。

db.bbs.aggregate({"group":{"_id":"author","count":{"$sum":1}}})

在题目 4 的基础上进行排序。

db.bbs.aggregate({"group":{"_id":"author","count":{"sum":1}}},{"sort":{"count":-1}})

在 4 的基础上限制输出结果为 5 个

db.bbs.aggregate({"group":{"_id":"author","count":{"sum":1}}},{"sort":{"count":-1}}, {"$limit":5})

思考题:如何更安全的访问 MongoDB 数据库?

要更安全地访问MongoDB数据库,可以采取以下几个步骤:

  1. 启用身份验证:在MongoDB中创建用户并分配合适的权限,然后启用身份验证。这样只有经过身份验证的用户才能访问数据库。

  2. 使用强密码:确保为MongoDB用户设置强密码,包括足够的长度和复杂性。避免使用容易猜测的密码,最好使用密码管理工具来生成和存储密码。

  3. 使用TLS/SSL加密:通过启用TLS/SSL加密,在数据库连接过程中对数据进行加密传输,确保数据在传输过程中的安全性。

  4. 限制网络访问:将MongoDB实例设置为仅接受来自可信源的连接,例如特定IP地址或经过安全网络隔离的服务器。

  5. 更新和维护数据库:定期更新MongoDB和相关驱动程序以获取最新的安全性补丁。此外,监控和审计数据库活动,以便及时发现和应对任何潜在的安全问题。

  6. 定期备份数据:定期备份MongoDB数据库,以防止数据丢失或意外删除。确保备份数据存储在安全的位置,并测试恢复过程以验证备份的完整性和可用性。

完成Python操作MongoDB的代码已经在前面提供过了,你可以使用pymongo库来操作MongoDB数据库。记得按照安全的最佳实践来编写代码,例如使用安全的身份验证、加密通信等。

小结

完成 python 操作 mongodb。

在本次任务中,我们完成了使用Python操作MongoDB数据库的代码。我们使用了pymongo库来连接MongoDB并执行一些常见的操作,如插入文档、查询文档和更新文档。

要注意的是,当访问MongoDB数据库时,需要确保使用安全的方法来保护数据和系统的安全性。以下是一些常见的最佳实践:

  • 启用身份验证并为用户设置强密码,以便只有经过身份验证的用户才能访问数据库。

  • 使用TLS/SSL加密来保护数据在传输过程中的安全性。

  • 限制网络访问,只允许来自可信源的连接,并进行必要的网络隔离和防火墙设置。

  • 定期更新数据库和相关驱动程序以获取最新的安全性补丁。

  • 定期备份数据以防止数据丢失,并确保备份数据存储在安全的位置。

遵循这些安全性最佳实践将有助于保护MongoDB数据库和相关数据的安全性和完整性。在编写代码时,还应注意处理异常、输入验证和安全编码等方面,以防止潜在的安全漏洞。

相关推荐
许野平13 分钟前
Rust: 利用 chrono 库实现日期和字符串互相转换
开发语言·后端·rust·字符串·转换·日期·chrono
也无晴也无风雨16 分钟前
在JS中, 0 == [0] 吗
开发语言·javascript
零炻大礼包23 分钟前
【SQL server】数据库远程连接配置
数据库
Aloudata25 分钟前
从Apache Atlas到Aloudata BIG,数据血缘解析有何改变?
大数据·apache·数据血缘·主动元数据·数据链路
狂奔solar25 分钟前
yelp数据集上识别潜在的热门商家
开发语言·python
Tassel_YUE26 分钟前
网络自动化04:python实现ACL匹配信息(主机与主机信息)
网络·python·自动化
水豚AI课代表31 分钟前
分析报告、调研报告、工作方案等的提示词
大数据·人工智能·学习·chatgpt·aigc
zmgst31 分钟前
canal1.1.7使用canal-adapter进行mysql同步数据
java·数据库·mysql
聪明的墨菲特i33 分钟前
Python爬虫学习
爬虫·python·学习
随心............33 分钟前
python操作MySQL以及SQL综合案例
数据库·mysql