我想用 GridFS 创建一个虚拟文件系统。
实际上,我正在考虑使用文件夹对象从 GridFS 扩展 fs.files 集合。
文件夹架构如下:
var folder = {
_id: new ObjectID(),
name: "Folder1",
metadata: {
type: "Folder",
parentId: ObjectID("xxxxxxxxx")
}
};
并通过 parentId 获取所有文件和文件夹,这将是一个 ObjectID 并存储在同一个集合中:
function getFilesAndFolders(parentId) {
var items = db.fs.files.find({ "metadata.parentId": parentId });
items.forEach(function (item) {
switch (item.metadata.type) {
case "Folder":
// Do something with the folder
break;
case "File":
// Do something with the file
break;
default: break;
}
});
return items;
}
使用不同的对象扩展 db.fs.files 集合是一个好习惯,或者创建单独的集合(例如 db.fs.folders)更好,但对 fs.files 和 fs.folders 有两个查询获得所有元素?
最佳答案
有一些使用标准 GridFS 实现的方法可能对您的虚拟文件夹概念有所帮助:
您可以将“虚拟文件夹”路径的值保存在 GridFS
files
中。元数据。假设你想实现一个嵌套的文件夹层次结构,阅读 MongoDB 数据模型文档会很有用,其中包含 Model Tree Structures 的常见模式。 .GridFS有“桶”或命名空间的概念。默认命名空间是
fs
,但您可以为每个“虚拟文件夹”或相对扁平的内容类型使用不同的命名空间。
关于mongodb - 将文件夹存储在 fs.files 集合中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21254138/