如何从MongoDB中的其他数据库引用实体?

时间:2017-08-03 20:19:04

标签: mongodb mongoose

我们正在使用TypeScript开发MicroServices。后端是MongoDB,我们使用的是Mongoose。 One MicroService处理School和Another MicroService处理培训。每个MicroService都维护着自己的数据库。

学校模型需要根据MongoDB提供的trainingID字段而不是_ID字段来引用培训。

我们将此引用定义为普通字符串,这样来自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);

问题

这是从其他数据库定义对实体的引用的最佳方法吗?

1 个答案:

答案 0 :(得分:1)

不太可能,我会说。

您在此处对数据建模的方式似乎表明,单个学校只能分配一个培训。那对我来说,听起来有些语义错误......?

如果这真的是你的意图,你会希望将所有内容都放在同一个文档中,并简单地从你的各个微服务中设计它的不同部分(如果它们在设置下继续有意义的话)。

否则,如果学校确实可以参考多个培训,则需要在模式中引用培训集合。阅读populate(),了解如何最好地建立关系模型:

http://mongoosejs.com/docs/populate.html