我想用GridFS创建一个虚拟文件系统.
实际上,我考虑使用文件夹对象从GridFS扩展fs.files集合.
文件夹架构将是这样的:
var folder = {
_id: new ObjectID(),
name: "Folder1",
metadata: {
type: "Folder",
parentId: ObjectID("xxxxxxxxx")
}
};
Run Code Online (Sandbox Code Playgroud)
并通过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;
}
Run Code Online (Sandbox Code Playgroud)
使用不同的对象扩展db.fs.files集合是一个很好的做法,或者更好地创建单独的集合(例如db.fs.folders),但是在fs.files和fs.folders上有两个查询来获取所有项目?
使用标准GridFS实现的一些方法可能对您的虚拟文件夹概念有所帮助:
您可以在GridFSfiles
元数据中保存"虚拟文件夹"路径的值.假设您要实现嵌套文件夹层次结构,那么阅读包含模型树结构的常见模式的MongoDB数据模型文档将非常有用.
GridFS具有"桶"或命名空间的概念.默认名称空间是fs
,但如果它们相对平坦,则可以为每个"虚拟文件夹"或内容类型使用不同的命名空间.
归档时间: |
|
查看次数: |
2439 次 |
最近记录: |