【问题标题】:Nest mongoose schema within itself?在自身内嵌套猫鼬模式?
【发布时间】:2018-11-13 18:28:01
【问题描述】:

mongoose 是否可以创建一个模式,将其称为文件夹,并且它在称为子文件夹中具有一个属性,该属性是嵌套文件夹子文档的数组?

const mongoose = require('mongoose')

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

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

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

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

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    我没有亲自尝试过,但我读过这可以通过在要引用当前模型的字段中简单地引用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);
    

    希望对您有所帮助!

    【讨论】:

      【解决方案2】:

      看来您需要稍微澄清一下您的问题,但据我从问题中了解到的,是的,可以通过这种方式完成:

      var mongoose = require('mongoose');
      var FolderSchema = new mongoose.Schema({
       SubFolders = [ type:monogoose.Schema.Types.ObjectId, ref : 'Folders']
       });
      var folder = mongoose.model('Folders',FolderSchema);
        module.exports = folder;
      

      这对你有用。

      【讨论】:

        猜你喜欢
        • 2019-03-22
        • 2014-06-22
        • 2019-07-20
        • 2017-06-12
        • 1970-01-01
        • 2015-09-21
        • 2021-06-07
        • 1970-01-01
        • 2018-06-23
        相关资源
        最近更新 更多