如何使用pymongo在GridFS中存储自定义元数据?

2 投票
1 回答
2168 浏览
提问于 2025-04-18 02:57

这几天我一直在尝试给我放入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。

撰写回答