处理关系mongoose模式

时间:2016-12-11 00:21:34

标签: node.js mongodb mongoose

我正在构建一个项目,其中一部分是媒体库。用户可以创建文件夹并将文件上传到任何文件夹中。

我的文件夹/文件结构是虚拟的,意味着该文件夹仅存在于数据库中,文件位于一个物理文件夹下,但每个文件的元数据包含文件夹结构内的级别。

现在所有文件夹和文件都在一个架构下,我可以检索所选文件夹的子文件夹/文件,我可以检索单个文件夹/文件,也可以按类型检索文件。而且效果很好,但是)

我不想将每种文件类型分成自己的模式,因为每种文件类型都有自己的属性集。现在我不知道如何将这些模式链接到我的资源模式。

这是否意味着为了检索所选文件夹的子文件夹/文件,我必须分别查询每个模式并将每个结果合并为一个?似乎这不是一个好主意,但我无法弄清楚如何处理它。

是否有处理此类情景的常用方法?

感谢。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,你要保存文件元数据和文件夹结构,对吗?

如果是这样,也许你可以使用populate来告诉mongoose将每个文件类型Schema链接到:

SomeTypeSchema = new Schema({
    // ... metadata fields ...
    resourceParent: {
        type: Schema.Types.ObjectId,
        ref: 'ResourceModelName'
    }
});
module.exports = mongoose.model('SomeType', SomeTypeSchema);

然后你可以这样做:

var type = SomeType.find({field: 'somefilter'})
    .populate('resourceParent')
    .exec(function(err) {
        console.log(type.resourceParent.name);
    });

文档:http://mongoosejs.com/docs/populate.html