2012-03-12 10 views
1

内の加入者の配列を格納する私は現在、次のように保存されているチャンネルのコレクションがあります。MongoDBは:親オブジェクト

{ "_id" : ObjectId("4f5d1012d48147e840000000"), "title" : "Testing", "description" : "hello!", "created" : "2012-03-11 20:50:26", "user" : ObjectId("4f5d0408d48147207f000000") } 

をしかし、私は、ユーザーが今、このチャンネルにサブスクライブできるようにしたいと思います。私はきれいに私のリチウムオブジェクト内でこれを実装する方法の周りに私の頭を取得するように見えるカントけれども

{ 
    "_id" : ObjectId("4f5d1012d48147e840000000"), 
    "title" : "Testing", 
    "description" : "hello!", 
    "subscriptions" : 
     { "user" : ObjectId("USERIDHERE"), "created" : DATETIME }, 
     { "user" : ObjectId("USERIDHERE"), "created" : DATETIME }, 
     { "user" : ObjectId("USERIDHERE"), "created" : DATETIME } 
    "created" : "2012-03-11 20:50:26", 
    "user" : ObjectId("4f5d0408d48147207f000000") 
} 

:私は、この重要な十分に考慮されるべき独自のコレクションはので、私は次のようにそれを保存したいとは思いません。私の$story->voteプロパティは、私が毎回更新するための配列になりますか?

答えて

4

IMHO、どのように構造化するかは、購読をどのように使用するかによって異なります。

私が言った理由は、埋め込まれたmongoオブジェクトとリンクされたコレクションの間のパフォーマンスの問題のためです。 http://www.mongodb.org/display/DOCS/Schema+Design

サブスクリプションにユーザーIDを入れるのではなく、チャンネルIDとユーザー(チャンネルIDを購読しているユーザーの埋め込みコレクションとしてリンクする)を提案します。

ユーザーのコレクションを(コントロールパネルやダッシュボード、フロントページなどで)プルすると、表示するチャンネルの一覧が表示されるため、ここでの使用方法は意味があります。

チャンネルを表示することを計画していて、チャンネルを購読しているすべてのユーザーを表示することは、スタックオーバーフローのチャットシステムと似ています。

これらを別々のコレクションに入れることは、集計を行う予定がある場合や、複数のコレクションがサブスクリプションにアクセスする場合に意味があります。

+1

私はトンヨンの思考に同意します。純粋な技術面では、基本的に$ entity-> subentity = array($ a、$ b、$ c)のようなものを書くだけです。リチウムは残りの部分をするでしょう – Tomen

+1

@Tomen yea、Tomenのコードサンプルは、最終的に何をするかを実装する方法です。私はサンプルコードを追加するのを忘れていました。 –

関連する問題