【发布时间】:2018-01-11 15:02:21
【问题描述】:
我们正在使用 TypeScript 开发微服务。后端是 MongoDB,我们使用的是 Mongoose。一个微服务处理学校,另一个微服务处理培训。每个微服务都维护自己的数据库。
School Model 需要有基于 trainingID 字段而不是 MongoDB 提供的 _ID 字段的 Training 参考。
我们将此引用定义为纯字符串,这样 Training Collection 中的 trainingID 的值将保存在 School Collection 中,其字段名称与 trainingID 相同。
这是目前为止的代码:
SchoolModel.ts
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);
TrainingModel.ts
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);
问题
这是定义对其他数据库实体的引用的最佳方式吗?
【问题讨论】:
-
当我想到微服务时,我会想到可以独立且没有其他服务作为依赖项的自包含应用程序。
-
但是当他们必须的时候,他们只是持有类似 s 主键的东西。除了您描述的方式之外,我看不出还有其他方法可以做到这一点。我猜那些trainingID女孩是不可变的。