2017-08-03 15 views
0

TypeScriptを使用してMicroServicesを開発しています。バックエンドはMongoDBで、Mongooseを使用しています。 1つのマイクロサービスは学校を扱い、もう1つのマイクロサービスはトレーニングを扱います。各MicroServiceは独自のデータベースを保持しています。MongoDBの他のデータベースからエンティティを参照するには?

学校モデルでは、trainingIDフィールドに基づいてトレーニングを参照する必要があり、MongoDBが提供するフィールドは_IDではありません。

トレーニングコレクションのtrainingIDの値が、trainingIDと同じフィールド名でSchool Collectionに保持されるように、この参照をプレーンストリングとして定義しています。ここで

は、これまでのコードです:

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); 

質問

これは、への参照を定義するための最良の方法です他のデータベースのエンティティ?

+0

私はmicroservicesについて考えるとき、私は、スタンドアロンと依存関係として別のサービスを持つことができないアプリケーションが含まれて自己を考えます。 – user602525

+0

しかし、彼らがする必要があるとき、彼らは単に主キーのようなものを保持します。私はあなたが描写する方法以外にこれを行うには、とにかく他には見ません。私はそれらの訓練を推測していますID女の子は不変です。 –

答えて

0

そうは思いません。

ここでデータをモデル化する方法は、1つの学校に1つのトレーニングしか割り当てられないことを示しているようです。それは、私にとっては、まずは意味的に間違っているように聞こえる...?

本当にあなたが意図したのであれば、すべての文書を同じ文書に入れて、個々のマイクロサービスと異なる部分を単に投影することが望ましいでしょう。

それ以外の場合は、学校で実際に複数のトレーニングを参照できる場合は、というスキーマのコレクションのコレクションへの参照が必要です。どのように最適なモデルとの関係を見るためにpopulate()上に読む:

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

+0

皆様のお返事ありがとうございます。 @dnickless - populate()を使うために、私は "ref"を使って関係を定義しなければならず、 "_ID"を参照します。私はそれをしたくありません。トレーニングは複数にすることができます。だから、私たちはトレーニングの配列を持っている可能性があります。しかし、スクール・サービスからは、トレーニングIDの有効性を確認するためトレーニングサービスに電話をかけます。また、これは他の質問と全く同じだとは思わない。もう1つの質問は、モングースで2つの異なる接続を維持できないということです。 –

関連する問題