2012-03-15 9 views
2

リレーショナルDBでは多対多の関係を持つ 'User'と 'Event'という2つのテーブルがあるため、 'UsersEvents'という結合テーブルがあります。今度は、2つのID以外に、このテーブルに保存したいデータがあります。これは、「Enjoyed」というブール値のようなものです。Mongoの多対多結合に関するデータのモデリングは?

私はMongoでテーブル間に埋め込みリンクを作成することを理解しました。モンゴースを使用して

var Person = new Schema({ 
    email: String, 
    events: [EventFeedback] 
}) 

var Event = new Schema({ ... }); 

var EventFeedback = new Schema({ 
    person: Schema.ObjectId, 
    event: Schema.ObjectId, 
    enjoyed: Boolean 
}); 

これは本当にこれをモデル化する最良の方法ですか?私はEventFeedbackのすべてがPerson.eventsにあると思っていましたが、これはEvent._idによって索引付けされますか?それとも、これはマングースの単なる限界ですか?

+1

をお試しくださいジョインが必要な自分。 – YXD

+0

実際、モデルのようなものですが、主にArrayコンテンツの構造を定義するために必要なのは、[Embedded Documents](http://mongoosejs.com/docs/embedded-documents.html)です。私はちょうど私がどのようにこれらの組み込みドキュメントの1つをイベントID(または任意の外部ID)で探すのか心配しています...? – CpILL

答えて

1

リンクではなく埋め込みドキュメントを使用する方がよいでしょう。

var Person = { 
    email: "[email protected]", 
    events: [ 
     {code: "MONGONY2012", name: "Mongo NY", date: "5/23/2012", link: "http://www.10gen.com/events/mongo-nyc", enjoyed: true}, 
     {code: "MONGOPHL2012", name: "Mongo Philly", date: "4/9/2012", link: "http://www.10gen.com/events/mongodb-philly", enjoyed: true} 
    ] 
} 

あなたは、ドット表記を使用して、簡単にイベントにモンゴを照会することができます

db.people.find({"events.code": "MONGONY2012"})

+0

私はこれを問題として認識しています。多分あなたは多くの出来事と多くの人を持つでしょう。それぞれの人のためにイベントコードを繰り返すつもりですか? –

2

あなたが見つけた場合正直私は、リレーショナル・データベースとなるだろう、このよう

var EventScheme = new Schema({ ... }); 
mongoose.model('Event', EventScheme); 

var PersonScheme = new Schema({ 
    email: String, 
    events: [{ 
    event: { 
     type: mongoose.Schema.ObjectId, 
     ref: 'Event' 
    }, 
    enjoyed: Boolean 
    }] 
}); 
関連する問題