嵌套猫鼬模式本身?

dfe*_*erg -1 mongoose mongodb node.js

mongoose 是否可以创建一个架构,将其命名为 Folders 并且它在被调用的子文件夹中有一个属性,它是一个嵌套的 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 ]
})
Run Code Online (Sandbox Code Playgroud)

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

我知道我可以让数组成为引用集合的 ObjectId 列表,但我希望将它全部嵌套为文档。我想如果我确实 populate() 让它解析文档 ID,那本质上是一样的。只是想知道是否还有另一种我不知道的方法。

bha*_*waj 6

我没有亲自尝试过这个,但我读过这可以通过简单地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);
Run Code Online (Sandbox Code Playgroud)

希望有帮助!