0 レビュー
1 回答
php-MongoDB:親オブジェクト内にサブスクライバーの配列を格納する
現在、次のように保存されている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")
}
リチウムオブジェクト内にこれをきれいに実装する方法について頭を悩ませているようには見えませんが。 $story->vote
プロパティは、更新のたびにプッシュする配列になりますか?
わからない
0
レビュー
答え :
解決策:
IMHO、サブスクリプションの使用方法に応じて構造化する方法。
私がこれを言う理由は、埋め込まれたmongoオブジェクトとリンクされたコレクションのパフォーマンスの問題によるものです。 http://www.mongodb.org/display/DOCS/Schema+Design
ユーザーIDをサブスクリプションに含める代わりに、チャネルIDをユーザーにリンクすることを提案します(サブスクライブしたユーザーに埋め込まれたコレクションとしてのチャネルID)。
ユーザーのコレクション(コントロールパネル、ダッシュボード、フロントページなど)をプルすると、表示するチャネルのリストが表示されるため、ここでの使用法は理にかなっています。
チャンネルにユーザーIDを埋め込むことは、チャンネルを表示し、チャンネルに登録しているすべてのユーザーを表示する場合にのみ意味があります。たとえば、スタックオーバーフローのチャットシステムのように。
集計を行う予定がある場合、またはサブスクリプションにアクセスするコレクションが複数ある場合は、それらを別のコレクションに入れるのが理にかなっています。
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。