如何在GridFS中更新已保存的文档额外数据

时间:2016-11-11 14:25:27

标签: pymongo gridfs

我在gridFS上存储了存储有额外信息的文件 - 它没有在元数据上设置,否则我会使用this

对于Pymongo 3.2.2,我们将信息存储在与fs.files(不使用元数据)中的实际数据相同的级别上

所以例如我们有:

fs.files = [ {
_id, description, title, ...
}]

当我像这样调用GridFS.put并且没有任何反应时

FS = GridFS(mongo_,)
file.description = request_data.get('description', None)
FS.put(file)

如何更新该文件的额外信息,例如说明?

2 个答案:

答案 0 :(得分:-1)

在不使用GridFS的情况下手动更新这些额外字段:

file = mongo_.fs.files.find_one({'_id': ObjectId(fileId)})
file['description'] = request_data.get('description', None)
mongo_.fs.files.save(file)

答案 1 :(得分:-1)

代码示例中的file是什么?也就是说,你传递给GridFS.put的是什么?

要向GridFS文件添加元数据,请将其他关键字参数传递给putas it shows in the PyMongo tutorial

>>> fs.put(b'data', filename='foo', description='my description')
ObjectId('5825ea8ea08bff9df5059099')

现在,元数据与您的数据一起存储在GridFS中:

>>> gridout = fs.get(ObjectId('5825ea8ea08bff9df5059099'))
>>> gridout.description
u'my description'

在幕后,您可以看到PyMongo将元数据存储在MongoDB的fs.files集合中:

>>> for doc in db.fs.files.find()
...     print(doc.get('description'))
...     
my description

但访问GridFS数据的更好方法是使用PyMongo的GridFS API,而不是直接查询集合。

存储元数据的另一种方法是创建GridIn,设置字段,然后调用close

>>> gridin = fs.new_file()
>>> gridin.filename = 'foo'
>>> gridin.description = 'my description'
>>> gridin.write(b'data')
>>> gridin.close()

如果您需要多次使用数据块调用write,这是一个不错的选择。