1

現在、次のように格納されている Channels コレクションがあります。

{ "_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") 
}

Lithiumオブジェクト内でこれをきれいに実装する方法について頭を悩ませているようには見えませんが。私の$story->voteプロパティは、更新ごとにプッシュする配列になりますか?

4

1 に答える 1

4

IMHO、どのように構成するかは、サブスクリプションをどのように使用するかによって異なります。

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

ユーザー ID をサブスクリプションに入れる代わりに、チャネル ID をユーザー (サブスクライブしたユーザーに埋め込まれたコレクションとしてのチャネル ID) にリンクすることを提案します。

ユーザーのコレクション (コントロール パネル、ダッシュボード、フロント ページなど) をプルすると、表示するチャネルのリストが得られるため、ここでの使用は理にかなっています。

チャネルにユーザー ID を埋め込むことは、スタック オーバーフローのチャット システムのように、チャネルを表示し、それらにサブスクライブしているすべてのユーザーを表示することを計画している場合にのみ意味があります。

集計を行う予定がある場合、またはサブスクリプションにアクセスするコレクションが複数ある場合は、それらを別のコレクションに入れることは理にかなっています。

于 2012-03-13T02:15:42.250 に答える