2012-11-12 10 views
12

文書がグループごとに自然にクラスター化されるアプリケーション(Express + MongoDB + Mongoose)を作成しています。データベースへのすべてのクエリは、単一グループのドキュメントにアクセスするだけで済みます。だから私は、パフォーマンスのために各グループを独自のコレクションに分けることをお勧めします。Mongoose - (MongoDB)の異なるコレクションの同じスキーマ

ここでは、同じタイプのドキュメントを格納するため、これらのコレクションごとに同じスキーマを使用します。以前はすべてを1つのコレクションに収めていましたが、今は1つのグループに複数のモデルが必要です。

(共有スキーマを使用して)リクエストごとに新しいModelオブジェクトを作成することをお勧めしますか、これは高額ですか?この場合、どのようなアーキテクチャ上の決定が良いでしょうか?

私が考えることができる最良のアプローチは、コレクションの要求が初めてあったときにモデルを作成してから、モデルをすぐにアクセスできるように辞書にキャッシュすることです。

私は最良のアプローチは、各リクエストで新しいModelオブジェクトを作成するコストにかかっていると思います。

ありがとうございます!

答えて

20

モデルは既にMongooseによってキャッシュされており、複数のモデル/コレクションに対して同じスキーマオブジェクトを使用できます。だからのようなコードを使用して(起動時に)いったんモデルのあなたのセットを作成します。

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 
var schema = new Schema({...}); 
var model1 = mongoose.model('model1', schema); 
var model2 = mongoose.model('model2', schema); 

あなたは、model1周りmodel2モデルインスタンスを渡したくない場合にmongoose.model('model1');を呼び出すことにより、必要に応じて、あなたがそれらを調べることができますあなたのハンドラー。

+0

2つのコレクションを*別のDB *に保存していたときに、この問題が発生しました。その場合は、2つの異なるスキーマを作成することをお勧めしますが、同じスキーマ仕様オブジェクト(上記の{{}})を再利用できます。 (私が得たエラーは奇妙なものでした: "検証に失敗しました:path __vは必須です") – joeytwiddle

関連する問題