【大数据存储与处理】实验五 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 中编写如下代码: 

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 

【大数据存储与处理】实验五 Python 操作 MongoDB_第1张图片

查看插入的数据 

db.smessage.findOne() 

【大数据存储与处理】实验五 Python 操作 MongoDB_第2张图片

题目二:在 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"}}}) 

【大数据存储与处理】实验五 Python 操作 MongoDB_第3张图片

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

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 中编写如下代码: 

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

【大数据存储与处理】实验五 Python 操作 MongoDB_第4张图片

查看插入的数据 

db.bbs.findOne() 

【大数据存储与处理】实验五 Python 操作 MongoDB_第5张图片

题目四:在 mongodb shell 终端查询 

查询每条记录的作者。 

db.bbs.aggregate({“$project”:{“author”:1}}) 【大数据存储与处理】实验五 Python 操作 MongoDB_第6张图片

用 group 将作者名称分组。 

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

【大数据存储与处理】实验五 Python 操作 MongoDB_第7张图片

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

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

【大数据存储与处理】实验五 Python 操作 MongoDB_第8张图片

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

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

你可能感兴趣的:(大数据,大数据,mongodb,python,数据库,开发语言)