【大数据存储与处理】实验五 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数据库和相关数据的安全性和完整性。在编写代码时,还应注意处理异常、输入验证和安全编码等方面,以防止潜在的安全漏洞。

相关推荐
L@ncor3 小时前
第六章 框架开发实践 · 学习笔记(AutoGen / AgentScope / CAMEL / LangGraph)
python·框架·autogen·langgraph·agentscope
Zhou1411363 小时前
SpringSecurity_02_授权与高级功能
开发语言·python
m0_466525293 小时前
数字认证参加第十四届用户体验大会,分享标准建设思路
大数据·人工智能·科技
康实训3 小时前
2026数字化AI智慧实训建设方案
大数据·人工智能·实训室·实训室建设
知行产研3 小时前
易控智驾:毛利率跃升17.2个百分点,矿山无人驾驶从“规模换增长“迈入“盈利拐点“
数据库·mysql
千里码aicood3 小时前
基于CART算法的图书分类系统设计与实现
数据库·算法·分类
码匠许师傅3 小时前
【C++三方组件】cpp-httplib:一个头文件起 HTTP 服务
开发语言·c++·http
玫瑰互动GEO3 小时前
开发者学GEO优化:从算法基础到CoT推理链
大数据·人工智能·ai·geo·ai搜索·geo优化
饺子大魔王的男人4 小时前
Redis 内存和连接异常怎么排查?用 redis_exporter 搭一套可远程抓取的监控链路
数据库·redis·bootstrap