В настоящее время я работаю над проектом, в котором я должен получить документ, загруженный в базу данных MongoDB с помощью GridFS, и сохранить его в моем локальном каталоге.
До сих пор я написал следующие строки кода:
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))
, который, согласно официальной документации Pymon go и GridFS, предоставляет файловый интерфейс для чтения. Однако я просто знаю имя txt, сохраненного в базе данных, я понятия не имею, что такое идентификатор объекта, я не могу использовать список или dict для хранения всех идентификаторов моих документов, поскольку это было бы нецелесообразно. Я проверил много сообщений здесь, в StackOverflow, и все предлагают использовать подписку. В основном вы создаете курсор, используя fs.find()
, затем вы можете перебирать курсор, например, следующим образом:
for x in fs.find({'filename': 'my_file.txt'}):
ID = x['_id']
видите, многие ответы здесь предлагают мне сделать следующее, единственная проблема заключается в том, что объект Cursor не подписывается, и я понятия не имею, как я могу решить эту проблему.
Я должен найти способ получить документ '_id' с учетом имени файла документа, чтобы позже я мог использовать его вместе с fs.get(ObjectId(ID))
.
Надеюсь, ты сможешь мне помочь, большое тебе спасибо! Маттео