我目前正在从事一个项目,在该项目中,我必须使用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
)的目录!因此,我有一个与我在数据库中上传的文本完全不同的文本,文本中唯一的一行是:E:\\my_folder\\sub_folder\\my_file.txt
这有点奇怪,我甚至不知道为什么会这样
我认为如果我使用fs.get(ObjectId(ID))
方法就可以了,根据Pymongo和GridFS的官方文档,它提供了一个类似文件的阅读接口。然而,我只知道数据库中保存的txt的名称,我不知道对象ID是什么,我不能使用列表或dict来存储我文档的所有ID,因为它不值得。我在这里查阅了很多关于StackOverflow的帖子,每个人都建议使用subscription。基本上,您可以使用fs.find()
创建一个游标,然后可以在游标上进行迭代,例如:
for x in fs.find({'filename': 'my_file.txt'}):
ID = x['_id']
看,这里的许多答案建议我做以下工作,唯一的问题是游标对象不可下标,我不知道如何解决这个问题
给定文档的文件名,我必须找到获取文档“\u id”的方法,以便以后可以将其与fs.get(ObjectId(ID))
结合使用
希望你能帮助我,非常感谢! 马特奥
您可以这样访问它:
但是“\ux”在Python中是受保护的成员,所以我四处寻找其他解决方案(找不到太多)。要仅获取ID,您可以执行以下操作:
由于只获取ID,您可能需要执行以下操作:
相关问题 更多 >
编程相关推荐