如何使用pymongo在GridFS中存储自定义元数据?
这几天我一直在尝试给我放入GridFS的文件添加一些自定义的元数据。
没有任何元数据的情况下插入是没问题的,但我尝试添加自定义元数据(用BSON.encode()、json_utils,或者直接用json)时,虽然数据被插入了,但都是错误的,像下面这样:
(这只是我很多尝试中的一个例子)
而且,如果我试图从MongoVue删除这些数据,就会出现以下错误:
Error in deleting file - Screenshot.C1.P94.74CB87859F8929FA289AAC1AF448FDE6121137C0.png
Unable to cast object of type 'MongoDB.Bson.BsonString' to type 'MongoDB.Bson.BsonDocument'.
Type: System.InvalidCastException
Stack: at MongoDB.Bson.BsonValue.get_AsBsonDocument()
at MongoDB.Driver.GridFS.MongoGridFSFileInfo.CacheFileInfo(BsonDocument fileInfo)
at MongoDB.Driver.GridFS.MongoGridFSFileInfo.Refresh()
at MongoDB.Driver.GridFS.MongoGridFSFileInfo.get_Exists()
at MongoDB.Driver.GridFS.MongoGridFSFileInfo.Delete()
看起来我需要把元数据作为BSON文档插入,但我找不到办法做到这一点。
有没有什么想法呢?
非常感谢!
1 个回答
1
下面的代码对我来说运行得很好:
file_id = grid_fs.put(file_from_disk,
filename="feature_arrays.npz",
comment="compressed numpy arrays",
meta="this is some meta")
我觉得如果把“meta”换成字典而不是字符串,这个方法也应该能正常工作。你还可以用一些关键词来存储所有的元数据,比如:
file_id = grid_fs.put(file_from_disk,
meta1=link_to_img,
meta2=author,
meta3=datetime.now())
据我所知,使用Python驱动的时候,你不需要太在意BSON。