2012-05-02 8 views
0

私はRailsとMongoidを使用しています。私は(各ユーザーが "お気に入り"のタグを持つことができるstackoverflowに似た)タグ付け機能を思いついています。Nosqlデザイン - タグとmvc

私がmongodbについて読んだデザイン記事から、私は「第4通常」の形で考えを止める必要があることを理解しました。私はtag_iduser_idで多対多テーブルを持ち、tag_iditem_idで多対多テーブルを考えています。しかし、nosqlについて読んでみると、各ユーザーまたは項目内にタグを埋め込む方がはるかに優れているようです(タグまたは文字列の配列としても)。

「タグ」コレクションにはタグのリストがあり、アプリケーションはユーザーがお気に入りにタグを追加できるかどうかを制御します。

私はこれを行う方法を理解しようとしています。 tagモデルにがあり、ユーザーモデルにkeysの配列を格納するだけですか?この状況で「リンク」や「埋め込み」がうまくいくのでしょうか?私はfoo-barのようなキーを持っていて、タイトルはFoo Barなので、タグをどのように取得するのかを考えようとしています。ユーザーのタグを取得する必要がある場合は、配列をループして、各タグモデルをフェッチしてタイトルを取得する必要がありますか?

答えて

0

私はこれのRubyの側面にあなたを助けることはできませんが、ここでのMongoDB側のいくつかのオプションがある。..

あなたはエントリは、このようなビットを見て、タグのコレクションを作成することができます。{_id: ObjectId(), title: "Foo Bar"}。各ユーザーは、その後、彼はあまりにも加入し、タグのid値の配列を持つことができます:

{ username: ..., 
    tags: [ObjectId(), ObjectId(), ... ]} 

その後、オペレータに$を使用してユーザータグのタイトルを取得することができます:

db.tags.find({_id: { $in: [array from user] }});