2011-12-08 16 views
1

MongoDBの外部キーObjectIdフィールドを実装する最良の方法をお勧めします。考えられる2つのオプションがあります。ネストされた_idフィールドを含むか、含まないかのどちらかです。MongoDB ObjectId外部キー実装の推奨事項

以下のfkUidフィールドをご覧ください。

{'_id':ObjectId('4ee12488f047051590000000'), 'fkUid':{'_id':ObjectId('4ee12488f047051590000001')} } 

OR

{'_id':ObjectId('4ee12488f047051590000000'), 'fkUid':ObjectId('4ee12488f047051590000001')} } 

任意の提言もいただければ幸いです。

答えて

7

余分なフィールド「レイヤー」をそこに置くのは難しいですから、私は個人的にはObjectIdを直接fkUidに保存します。

+0

は完全に一致します。サブ文書を追加すると、クエリを実行するのが難しくなり、更新が難しくなり、スペースが増え、おそらく遅くなります。私はまた、 'fk'プレフィックスを削除します。あなたの 'Message'にかなり明白な' SenderId'がある場合。 – mnemosyn

+1

うん、その接頭辞を削除することに同意した。 – tkrajcar

0

フィールドの名前(タイトルにあるもの)に関する質問がある場合は、通常、それが参照するオブジェクトの後に名前を付けるのがコンベンションです。

1

ここではhttp://www.mongodb.org/display/DOCS/Database+Referencesで説明されているデフォルトのdbref実装を使用することをお勧めします。ほとんどの特定の言語ドライバと互換性があります。

+0

私は同意しません。 "DBrefを使用する魅力的な理由がない限り、マニュアル参照を使用してください"。もちろん、使用例にもよりますが、これは良い一般的なアドバイスではありません。 – johndodo

+0

"多くのドライバがDBRefを自動的に解決します" - これは私にとっては魅力的です。また、そのような参照を大きなデータベース構造でサポートする方が簡単です。私はあなたが何をしているかを完全に確信している小さな仕事のために直接参照を使用するだけでよいことに同意します。 – lig

0

あなたが言及した両方の方法は同じ意味のものです。しかし、彼らは異なった種類の用法を持っています。

'fkUid':{'_id':ObjectId('4ee12488f047051590000001')}のようなfkUidを格納するオブジェクトは、それ自身の賛成です。例を挙げてみましょう。ユーザーが画像を投稿し、他のユーザーが投稿した画像を表示できるWebサイトがあるとします。しかし、画像を表示すると、ウェブサイトにはユーザーの名前/ユーザー名も表示されます。この方法で、'fkUid':{'_id':ObjectId('4ee12488f047051590000001'), username: 'SOME_X'}のような詳細を保存することもできます。 dbから詳細を取得するときに、特定のユーザ名を取得するために再度リクエストを送信する必要はありません_id

第2の方法では、'fkUid':ObjectId('4ee12488f047051590000001')} }のように、名前/ユーザー名を取得するためだけにサーバーに別のリクエストを送信する必要があります。

関連する問題