【问题标题】:Store folders in fs.files collection将文件夹存储在 fs.files 集合中
【发布时间】:2014-02-10 19:28:32
【问题描述】:

我想用 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 有两个查询获得所有物品?

【问题讨论】:

    标签: mongodb gridfs


    【解决方案1】:

    有一些使用标准 GridFS 实现的方法可能对您的虚拟文件夹概念有所帮助:

    1. 您可以将“虚拟文件夹”路径的值保存在 GridFS files 元数据中。假设您要实现嵌套的文件夹层次结构,阅读 MongoDB 数据模型文档会很有用,其中包含 Model Tree Structures 的常见模式。

    2. GridFS 有一个“桶”或命名空间的概念。默认命名空间是fs,但如果每个“虚拟文件夹”或内容类型相对扁平,您可以为它们使用不同的命名空间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-25
      • 2021-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多