提问者:小点点

如何在MongoDB中引用其他数据库中的实体?[重复]


我们正在使用 TypeScript 开发微服务。后端是MongoDB,我们正在使用Mongoose。一个微服务处理学校,另一个微服务处理培训。每个微服务都维护自己的数据库。

学校模型需要引用基于训练 ID 字段的训练,而不是 MongoDB 提供的_ID字段。

我们将此引用定义为纯字符串,以便训练集合中的 trainingID 值将保存在与 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);

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


共1个答案

匿名用户

不太可能,我会说。

您在这里对数据建模的方式似乎表明,一所学校只能分配一项培训。对我来说,这一开始就听起来有点语义错误...?

如果这真的是你的意图,你会想把所有东西都放在同一个文档中,并简单地从你的单个微服务中投影不同的部分(如果它们在这种设置下仍然有意义的话)。

否则,如果一所学校确实可以引用多个培训,那么你需要在你的模式中引用一组培训。阅读populate(),了解如何为关系建模:

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