【发布时间】:2017-07-04 07:07:47
【问题描述】:
我正在完成一个教程,在 Express 和 Mongoose 中构建一个小型库数据库。在本教程中,每本书都可以具有几种状态之一,并且只能具有这些值中的一种。这是一个枚举。我通过在 BookInstance 模式中放置一个值数组来处理这个问题:
var the_statuses = ['Available', 'Maintenance', 'Loaned', 'Reserved'];
当我有一个实例时效果很好——我使用虚拟方法来获取这些值
BookInstanceSchema
.virtual('statuses')
.get(function() {
return the_statuses;
});
如前所述,当我已经拥有一个实例时。
在创建 Schema 时,我将我的局部变量作为一个局部变量来访问:
var BookInstanceSchema = Schema({
book: { type: Schema.ObjectId, ref: 'Book', required: true }, //reference to the associated book
imprint: {type: String, required: true},
status: {type: String, required: true, enum: the_statuses, default: 'Maintenance'},
due_back: {type: Date, default: Date.now},
});
但是,如果我想直接从架构中获取枚举值,但从架构的外部获取,该怎么办?也就是说,如果我想创建,在本例中是 BookInstance 实例,并在选择菜单中为用户提供状态选择,我将无法访问实例(除非我把它弄混,然后简单地创建一个来获取枚举值)。
我试着做一个静态函数
BookInstanceSchema.statics.getStatuses = function() {
return this.the_statuses;
};
但它似乎不起作用。
做我想做的事情的最佳方法是什么? Mongoose中是否有“静态虚拟方法”之类的东西?
【问题讨论】:
标签: node.js mongodb mongoose enums mongoose-schema