我们正在使用TypeScript开发MicroServices。后端是MongoDB,我们使用的是Mongoose。 One MicroService处理School和Another MicroService处理培训。每个MicroService都维护着自己的数据库。
学校模型需要根据MongoDB提供的trainingID
字段而不是_ID
字段来引用培训。
我们将此引用定义为普通字符串,这样来自Training Collection的trainingID
的值将保存在School Collection中,其字段名称与trainingID
相同。
以下是目前的代码:
import { Document, Schema, Model, model } from "mongoose";
import { ISchoolModel } from './ISchoolModel';
export const schoolSchema = new Schema({
schoolId: String,
schoolName: String,
trainingId: String
});
export interface ISchool extends ISchoolModel, Document {
}
export const SchoolModel: Model<ISchool> = model<ISchool>("School", schoolSchema);
import { Document, Schema, Model, model } from "mongoose";
import { ITrainingModel } from './ITrainingModel';
export const trainingSchema = new Schema({
trainingId: String,
trainingName: String,
trainingDescription: String
});
export interface ITraining extends ITrainingModel, Document {
}
export const TrainingModel: Model<ITraining> = model<ITraining>("Training", trainingSchema);
这是从其他数据库定义对实体的引用的最佳方法吗?
答案 0 :(得分:1)
不太可能,我会说。
您在此处对数据建模的方式似乎表明,单个学校只能分配一个培训。那对我来说,听起来有些语义错误......?
如果这真的是你的意图,你会希望将所有内容都放在同一个文档中,并简单地从你的各个微服务中设计它的不同部分(如果它们在设置下继续有意义的话)。
否则,如果学校确实可以参考多个培训,则需要在模式中引用培训集合。阅读populate()
,了解如何最好地建立关系模型: