将文件夹存储在fs.files集合中

时间:2014-01-21 09:32:56

标签: mongodb gridfs

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

1 个答案:

答案 0 :(得分:5)

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

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

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