访问 Mongodb 中的文件
Accessing files in Mongodb
我在 python 中使用 sacred 包,这样可以跟踪我在 运行 中的计算实验。 sacred 允许添加观察者(mongodb
),它存储关于实验的各种信息(configuration
、source files
等)。
sacred
允许使用 sacred.Experiment.add_artifact(PATH_TO_FILE).
将工件添加到数据库 bt
此命令本质上是将文件添加到数据库中。
我正在使用 MongoDB 指南针,我可以访问实验信息并看到已添加一个工件。它包含两个字段:
'name
' 和 'file_id
' 其中包含一个 ObjectId
。 (见图)
我正在尝试访问存储的文件本身。我注意到在我的数据库下还有一个名为 fs.files
的额外 sub-db
我可以过滤以找到我的 ObjectId
但它似乎不允许我访问文件的内容本身。
MongoDB 文件存储由 "GridFS" 处理,它基本上将文件分成块并将它们存储在一个集合中 (fs.files)。
访问教程:http://api.mongodb.com/python/current/examples/gridfs.html
GridFS
(import gridfs, pymongo
)
的代码示例
如果您已经拥有 ObjectId
:
artifact = gridfs.GridFS(pymongo.MongoClient().sacred)).get(objectid)
为名为 filename
的工件查找 ObjectId
,其中 result
作为 db.runs.find
的一个条目:
objectid = next(a['file_id'] for a in result['artifacts'] if a['name'] == filename)
我编写了一个名为 incense
的小型库来访问通过 sacred 存储的 MongoDB 中的数据。它可以在 GitHub at https://github.com/JarnoRFB/incense 上和通过 pip 获得。有了它,您可以将实验加载为 Python 个对象。这些工件将作为对象提供,您可以再次将其保存在磁盘上或显示在 Jupyter 笔记本中
from incense import ExperimentLoader
loader = ExperimentLoader(db_name="my_db")
exp = loader.find_by_id(1)
print(exp.artifacts)
exp.artifacts["my_artifact"].save() # Save artifact on disk.
exp.artifacts["my_artifact"].render() # Display artifact in notebook.
我在 python 中使用 sacred 包,这样可以跟踪我在 运行 中的计算实验。 sacred 允许添加观察者(mongodb
),它存储关于实验的各种信息(configuration
、source files
等)。
sacred
允许使用 sacred.Experiment.add_artifact(PATH_TO_FILE).
此命令本质上是将文件添加到数据库中。
我正在使用 MongoDB 指南针,我可以访问实验信息并看到已添加一个工件。它包含两个字段:
'name
' 和 'file_id
' 其中包含一个 ObjectId
。 (见图)
我正在尝试访问存储的文件本身。我注意到在我的数据库下还有一个名为 fs.files
的额外 sub-db
我可以过滤以找到我的 ObjectId
但它似乎不允许我访问文件的内容本身。
MongoDB 文件存储由 "GridFS" 处理,它基本上将文件分成块并将它们存储在一个集合中 (fs.files)。
访问教程:http://api.mongodb.com/python/current/examples/gridfs.html
GridFS
(import gridfs, pymongo
)
如果您已经拥有 ObjectId
:
artifact = gridfs.GridFS(pymongo.MongoClient().sacred)).get(objectid)
为名为 filename
的工件查找 ObjectId
,其中 result
作为 db.runs.find
的一个条目:
objectid = next(a['file_id'] for a in result['artifacts'] if a['name'] == filename)
我编写了一个名为 incense
的小型库来访问通过 sacred 存储的 MongoDB 中的数据。它可以在 GitHub at https://github.com/JarnoRFB/incense 上和通过 pip 获得。有了它,您可以将实验加载为 Python 个对象。这些工件将作为对象提供,您可以再次将其保存在磁盘上或显示在 Jupyter 笔记本中
from incense import ExperimentLoader
loader = ExperimentLoader(db_name="my_db")
exp = loader.find_by_id(1)
print(exp.artifacts)
exp.artifacts["my_artifact"].save() # Save artifact on disk.
exp.artifacts["my_artifact"].render() # Display artifact in notebook.