具有自定义架构的Mongoose typeError

时间:2015-10-12 03:39:27

标签: javascript node.js mongoose

我试图将discountSchema用作类型。但是我收到了这个错误:

throw new TypeError('Undefined type at `' + path +
      ^
TypeError: Undefined type at `discount`

但如果我转换为array类型:

    discount: {
        type: [discountSchema],
        default:{}
    }

它有效。

我如何在猫鼬中使用复杂类型? 我是以错误的方式使用这个模型吗?我怎样才能像这样建模这个对象?

var discountSchema = new Schema({
    type: {type: String,default:'' },
    quantity: {type: Number,default:0 },
    value: {type: Number,default:0 }
});
var objectEncomendaPropertiesSchema = {
    recheios:{
        type:[String],
        default: [],
        select: true
    },
    availableEncomenda: {
        type: Boolean,
        default:false
    },
    discount: {
        type: discountSchema,
        default:{}
    }
};

2 个答案:

答案 0 :(得分:2)

无法设置 embedded documents存储为mongoose中的单个属性,它们始终存储在数组中

最接近此行为的是将您的媒体资源设置为ObjectId ref并使用populate方法获取它。 看看here,了解这种方法的工作原理。

查看嵌入文档docs

GitHub上有open issue请求你想要的行为。

答案 1 :(得分:0)

你试图创建两个模式然后连接它们吗?

var discountSchema = new Schema({
    type: {type: String,default:'' },
    quantity: {type: Number,default:0 },
    value: {type: Number,default:0 }
});

mongoose.model('Discount', discountSchema);

var objectEncomendaPropertiesSchema = new Schema({
    recheios:{
        type: String,
        default: '',
        select: true
    },
    availableEncomenda: {
        type: Boolean,
        default:false
    },
    discount: {
        type: Schema.Types.ObjectId,
        ref: 'Discount'
    }
})

mongoose.model('objectEncomendaProperties', objectEncomendaPropertiesSchema); 

我引用第二个模式中的折扣来引用ObjectId的第一个模式 它将在Discount模型中将属性作为第二个Schema中的discount属性获取。