【发布时间】:2020-11-27 13:26:46
【问题描述】:
我目前正在处理一个项目,我必须在其中检索使用 GridFS 上传到 MongoDB 数据库的文档并将其存储在我的本地目录中。
到目前为止,我已经写了这几行代码:
if not fs.exists({'filename': 'my_file.txt'}):
CRAWLED_FILE = os.path.join(SAVING_FOLDER, 'new_file.txt')
else:
file = fs.find_one({'filename': 'my_file.txt'})
CRAWLED_FILE = os.path.join(SAVING_FOLDER, 'new_file.txt')
with open(CRAWLED_FILE, 'wb') as f:
f.write(file.read())
f.close()
我相信find_one 不允许我在新文件中写入之前存储在数据库中的文件内容。 f.write(file.read()) 在刚刚创建的文件 (new_file.txt) 中写入存储 (new_file.txt) 的目录!所以我有一个与我在数据库中上传的完全不同的txt,txt中唯一的一行是:E:\\my_folder\\sub_folder\\my_file.txt
这有点奇怪,我什至不知道为什么会这样。
我认为如果我使用fs.get(ObjectId(ID)) 方法可以工作,根据 Pymongo 和 GridFS 的官方文档,它提供了一个类似文件的读取界面。但是我只知道保存在数据库中的 txt 的名称,我不知道对象 ID 是什么,我不能使用列表或字典来存储我的文档的所有 ID,因为它不值得。我在 StackOverflow 上查看了很多帖子,每个人都建议使用订阅。基本上你使用fs.find()创建一个游标然后你可以像这样迭代游标:
for x in fs.find({'filename': 'my_file.txt'}):
ID = x['_id']
看,这里的许多答案建议我执行以下操作,唯一的问题是 Cursor 对象不可下标,我不知道如何解决此问题。
我必须想办法在给定文档的文件名的情况下获取文档“_id”,以便以后可以将它与fs.get(ObjectId(ID))结合使用。
希望你能帮助我,非常感谢! 马特奥
【问题讨论】:
标签: python pymongo information-retrieval gridfs