egg.js 一个model中如何导出多个schma,并在service中读取?
定义这样一个 model
module.exports = app => {
const mongoose = app.mongoose;
const Schema = mongoose.Schema;
const foodSchema = new Schema({
restaurant_id: { type: Number, isRequired: true },
category_id: { type: Number, isRequired: true },
description: { type: String, default: '' },
image_path: String,
name: { type: String, isRequired: true },
});
foodSchema.index({ item_id: 1 });
const menuSchema = new Schema({
description: String,
is_selected: { type: Boolean, default: true },
icon_url: { type: String, default: '' },
name: { type: String, isRequired: true },
id: { type: Number, isRequired: true },
restaurant_id: { type: Number, isRequired: true },
type: { type: Number, default: 1 },
foods: [ foodSchema ],
});
menuSchema.index({ id: 1 });
const Food = mongoose.model('Food', foodSchema);
const Menu = mongoose.model('Menu', menuSchema);
return { Food, Menu };
};
在 service
中 如何读取这个 model
呢?
async getFoods(id) {
const { ctx } = this;
console.log(ctx.model.Food); // 这里打印处理没有food的实例
}
3 回复
一个model对应一个表
@nodeper 但是menu里面包含了foods,就没有办法么?
一个model对应一个表; 使用ref关联;
//./model/food.js
var foodSchema = Schema({
...
});
return mongoose.model('Food', foodSchema);
//./model/menu.js
var menuSchema = Schema({
...
foods: [{ type: Schema.Types.ObjectId, ref: 'Food' }]
});
return mongoose.model('Menu', menuSchema);
查询使用populate; https://mongoosejs.com/docs/populate.html