1.利用GridFS完成上传下载,源数据自行定义;
使用python 连接mongoDB
from pymongo import MongoClient
from gridfs import GridFS
# 连接到 MongoDB
# 使用指定的数据库
client = MongoClient('mongodb://localhost:27017/')
db = client['yongjiahui']
# 上传文件到 GridFS
# 参数:
# file_path:要上传的文件路径
# filename:文件名
# content_type:文件内容类型
# metadata:文件元数据
def upload_file(file_path, filename, content_type, metadata=None):
fs = GridFS(db)
with open(file_path, 'rb') as file:
data = file.read()
fs.put(data, filename=filename, content_type=content_type, metadata=metadata)
print(f"文件 '{filename}' 上传成功。")
# 下载文件从 GridFS
# 参数:
# file_id:文件 ID
# destination_path:下载目标路径
def download_file(file_id, destination_path):
fs = GridFS(db)
file = fs.get(file_id)
with open(destination_path, 'wb') as destination:
destination.write(file.read())
print(f"文件下载至 '{destination_path}'。")
# 示例用法
file_path = r'D:\Applications\scoop\apps\mongodb36\data\pythonGridFS.txt'
uploaded_filename = 'example.txt'
content_type = 'text/plain'
file_metadata = {'owner': 'John Doe', 'description': 'An example file'}
# 上传文件到 GridFS
upload_file(file_path, uploaded_filename, content_type, metadata=file_metadata)
# 下载文件从 GridFS
downloaded_file_id = db.fs.files.find_one({'filename': uploaded_filename})['_id']
download_destination = r'D:\Applications\scoop\apps\mongodb36\data\downloaded_file.txt' # 修改为实际的文件路径
download_file(downloaded_file_id, download_destination)
GridFS 是 MongoDB 中用于存储大文件的协议,它将大文件分割成多个块(chunk)并存储在两个集合中:fs.files
用于存储文件的元数据,fs.chunks
用于存储文件的实际数据块。下面是你的代码涉及到的 GridFS 操作的一些思路:
上传文件到 GridFS
pythonCopy codedef upload_file(file_path, filename, content_type, metadata=None):
fs = GridFS(db)
with open(file_path, 'rb') as file:
# 将文件以二进制形式上传到 GridFS
fs.put(file, filename=filename, content_type=content_type, metadata=metadata)
print(f"文件 '{filename}' 上传成功。")
- 连接到 MongoDB: 使用
MongoClient
连接到 MongoDB 数据库。 - 指定数据库: 使用连接的数据库客户端
client
获取或创建指定的数据库,这里是yongjiahui
。 - 上传文件: 使用
GridFS
对象创建一个文件对象并使用put
方法将文件内容上传到 GridFS。在这个过程中,文件会被分割成多个块并存储在fs.chunks
集合中,而文件的元数据则存储在fs.files
集合中。
下载文件从 GridFS
pythonCopy codedef download_file(file_id, destination_path):
fs = GridFS(db)
file = fs.get(file_id)
with open(destination_path, 'wb') as destination:
# 将文件内容写入目标路径
destination.write(file.read())
print(f"文件下载至 '{destination_path}'。")
- 连接到 MongoDB: 同样,使用
MongoClient
连接到 MongoDB 数据库。 - 指定数据库: 获取或创建指定的数据库,这里仍然是
yongjiahui
。 - 下载文件: 使用
GridFS
对象的get
方法根据文件的 ID 获取文件对象,然后将文件内容写入指定的目标路径。这里的目标路径是你指定的下载目标路径。
4、按要求完成分片集群操作;
-
开启config服务器;
docker run -d --name yjh1 \ -v /home/mongodb/mongo-config/config:/etc/mongod \ --network mongo-net \ --ip \ -p 27019:27019 \ mongo:3.6.13 \ --configsvr --replSet configReplSet --bind_ip 0.0.0.0 --logappend
rs.initiate({ _id: "configReplSet", configsvr: true, members: [ { _id: 0, host: "yjh1:27019" } ] })
mongo rs.initiate({ _id: "configReplSet", configsvr: true, members: [ { _id: 0, host: "yjh1:27019" } ] })
_id: “configReplSet”,
configsvr: true,
members: [
{ _id: 0, host: “yjh1:27019” }
]
})