我在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)
如何更新该文件的额外信息,例如说明?
答案 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文件添加元数据,请将其他关键字参数传递给put
,as 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
,这是一个不错的选择。