2013-12-10 6 views
17

私はアプリケーションモデルを定義しています。私が定義しているモデルごとに別々のファイルを用意しています。私の質問は、サブモデルを使用するモデルを作成する必要があります。 -document、それは別のファイルにありますが、私のモデルでそのスキーマを使用するにはどうすればいいですか?個別のファイルのマングースサブドキュメント、埋め込み方法

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var userSchema = new Schema({ 

    _id   : Schema.Types.ObjectId, 
    username  : String, 

}); 


module.exports = mongoose.model('User', userSchema); 
:私は、ユーザーモデルを定義 user.jsという名前のファイルを持っている

var childSchema = new Schema({ name: 'string' }); 

var parentSchema = new Schema({ 
    children: [childSchema] 
}); 

:私は何を意味することは、私が見てきたすべての例は、同じファイル、例えば上の子モデルと親を宣言することです

また、別のファイルにsport.jsと呼ばれ、私はスポーツのための他のモデル定義を持っている:

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var sportSchema = new Schema({ 

    _id  : Schema.Types.ObjectId, 
    name  : String 

}); 

module.exports = mongoose.model('Sport', sportSchema); 

は、だから私のユーザモデルに、私は番目のスポーツのためのフィールドを定義する必要がありますEユーザーが続くが、私はそのサブ文書を定義する方法がわからないスポーツの定義は別のファイル上にあるため、私はこの試みた:

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 
var SportsModel = require('sport'); 

var userSchema = new Schema({ 

    _id   : Schema.Types.ObjectId, 
    username  : String, 
sports   : [SportsModel] 

}); 


module.exports = mongoose.model('User', userSchema); 

をしかし、それは何以来の正しい方法だ場合、私はわからないんだけど私はモデルをエクスポートしています、スキーマではありません。

おかげさまで、私は各モデルを別々のファイルに定義して順序を維持したいと考えています。

答えて

38

モデルのスキーマには、schemaプロパティでアクセスできます。だから、これは動作するはずです:

var userSchema = new Schema({  
    _id   : Schema.Types.ObjectId, 
    username  : String, 
    sports  : [SportsModel.schema]  
}); 
+0

大変ありがとうございます。 – kevinblanco

+9

これは正しいとマークする必要があります。 – arg20

+0

金、純金です。 – ggderas

7

使用ところでref

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var userSchema = new Schema({ 
    _id  : Schema.Types.ObjectId, 
    username: String, 
    sports : [{ type: Schema.Types.ObjectId, ref: 'Sport' }] 
}); 

module.exports = mongoose.model('User', userSchema); 

を、refで、照会するとき、あなたは.populate('sports')を使用することができ、そしてマングースはあなたのために、これらの種類を拡大していきます。

+0

大変ありがとうございます。なぜ型がObjectIDなのですか? – kevinblanco

+0

これは基本的にSQLの外部キーと同等です。しかし、refは組み込みのObjectId型でのみ動作します。 – tandrewnichols

+0

ポピュレートの使用は非常に危険です。 MongoDBのような文書ベースのデータベースに関しては、かなりパターンがありません。ユーザー間でスポーツを共有する必要がない場合は、サブ文書を使用することをお勧めします。基本的に、MongoDBはリレーショナルデータベースではないことを覚えておくことが重要です。 – catalyst294

関連する問題