在MongoDB集合中查找字符串

时间:2012-05-26 15:33:02

标签: javascript node.js mongodb filesystems

我想在MongoDB中实现像collection一样的次要文件系统。

所以说我的对象看起来像这样

{ 
    "\":{
        'autoexec.bat':{ 
            name:'autoexec',
            filetype:'bat',
            size:1302
    },

    'users':{ /* its own tree */ },
    'windows':{ 
        'system':{ 
            'autoexec.bat':{
                name:'autoexec',
                filetype:'bat',
                size:1302123
            } 
        }
    }
}

我想知道如何以最有效的方式找到术语'autoexec.bat'。另外,对于文件树,有没有更好的方法在Node.js或C ++中实现它?我希望实现搜索等功能。

2 个答案:

答案 0 :(得分:2)

我会说:不要在一个巨大的文件中这样做。让每个文件成为集合中的自己的文档,引用父项和(可能)子项。现在几乎所有的操作都是微不足道的。您只需要考虑有效的方式来读取/删除整个树。

答案 1 :(得分:0)

上周在MongoNYC上,Kyle Banker通过示例给出了一个很好的talk架构设计。我认为你的问题与他的第一个音乐流派等级的例子非常相似。

实际上,每个文件都会在集合中包含一个文档。它将有一个父字段来标识它的直接父级(在你的情况下它所在的目录)和它的所有祖先的数组。

现在变得容易的查询是    - 文件“autoexec.bat”中的目录是什么    - 列出目录“foo”中的所有文件    - 在目录foo中递归列出所有文件(所有文件在其祖先中都带有“foo”。

不要忘记,您还可以选择将完整路径名保存到文件/目录及其基本名称。如果字段被索引,则允许通过路径的前导部分进行搜索。与文件名不同,它也将是独一无二的。

与往常一样,关键信息是您查询此集合以及性能和负载期望所需的所有方法。如果没有这个,可以很容易地选择一个模式,以便稍后给你一些挑战。