2016-11-11 88 views
1

我已存储在具有存储在其上的额外信息GridFS的文件 - 它不设置上,元数据,否则我会用this如何更新保存的文档中GridFS的额外数据

对于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) 

如何更新该文件的额外信息,如描述?

回答

-1

手动更新这些额外的领域,而无需使用GridFS的:

file = mongo_.fs.files.find_one({'_id': ObjectId(fileId)}) 
file['description'] = request_data.get('description', None) 
mongo_.fs.files.save(file) 
-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多次使用的数据块调用。

+0

是的。所有这些都是正确的。一旦你写了'gridin.description ='我的desc',然后fs.put - 这将接受它,但不会改变描述字段 - 你不能使用gridfs系统更新grindin.description –

相关问题