如何在mongoose js中嵌套相同的模式

时间:2015-09-21 19:27:16

标签: javascript node.js mongodb

我尝试使用mongoose js嵌套模式,特别是相同的模式,以创建树状结构。在此配置中,文档只能有1个父文档,但同一文档可以是多个子文档的父文档。这是我最初接触它的方式:

var mongoose = require('mongoose'),
Schema = mongoose.Schema,
ObjectId = Schema.ObjectId;

var mySchema = new Schema({
    _id: {
        type: ObjectId,
        required: true
    },
    parent: {
        _id: { 
            type: ObjectId, 
            ref: 'myModel'
        },
        required: true
    }
});

var myModel = mongoose.model('myModel', mySchema);

module.exports = {
    myModel: mongoose.model('myModel', myModel)
};

然而,当我运行它时,我得到了

A JavaScript error occurred in the main process Uncaught Exception: TypeError: Undefined type "undefined" at "file.required" Did you try nesting Schemas? You can only nest using refs or arrays.

我必须接近这个错误。如何使用mongoose js嵌套相同的模式?

1 个答案:

答案 0 :(得分:2)

警告已经显示“你只能使用refs或数组进行嵌套。”这是一种猫鼬设计。

但你可以做的是:

var MySchema = new mongoose.Schema({
    objectId: String,
    parent: {
        type: mongoose.Schema.ObjectId,
        ref: 'MySchema'
    },
})

这将使用架构内的架构,然后您可以使用“预存”来更新父级的数据。或者你可以使用refs数组并且只保留1个元素。

如何导出模式而不是模型,以便嵌套它。 像这样:

module.exports = MySchema;

然后我有一些appModel来设置我的模式集合的模型,像这样(app_model.js):

if(mongoose.modelNames().indexOf('mySchema') < 0) mongoose.model('mySchema', mySchema);