嵌套mongoose架构本身?

时间:2016-08-03 03:48:27

标签: node.js mongodb mongoose

是否有可能使用mongoose创建一个模式,称之为文件夹,它在被调用的子文件夹中有一个属性,它是一个嵌套的Folder子目录数组?

const mongoose = require('mongoose')

let SubSchema = mongoose.Schema({
    name: { type: String, required: true }
})

let FolderSchema = mongoose.Schema({
    name: { type: String, required: true },
    children: [ SubSchema ]
})

我知道我可以通过引用类似于上面显示的另一个模式来在数组中嵌套subdoc。我想要做的是在其自身内重用FolderSchema。显然这会导致问题,因为在创建模式时,FolderSchema不存在。有一个更好的方法吗?有没有办法使用相同的模式递归嵌套文档?

我知道我可以让数组成为引用集合的ObjectId列表,但我希望将它全部嵌套为文档。我想如果我使用populate()让它解析文档ID,那基本上就是同样的事情。只是想知道是否还有其他方法我不知道。

2 个答案:

答案 0 :(得分:2)

我还没有亲自尝试过,但是我已经读过,可以通过在要引用当前模型的字段中简单引用this来实现。

您想要的模型看起来像这样,

const mongoose = require('mongoose')

const FolderSchema = mongoose.Schema({
    name: { type: String, required: true },
    type: { type: String, enum: ['file', 'directory'],
    children: [ this ]
})

const FolderModel = mongoose.model('Folder', FolderSchema);

希望有帮助!

答案 1 :(得分:0)

看起来你需要澄清一下你的问题,但我从问题中理解,是的,可以这样做:

{{1}}

这对你有用。