Получить документ _id из документа GridFS по его имени файла - PullRequest
0 голосов
/ 07 августа 2020

В настоящее время я работаю над проектом, в котором я должен получить документ, загруженный в базу данных 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)).

Надеюсь, ты сможешь мне помочь, большое тебе спасибо! Маттео

...