5

MongoDBを使用しているときに、DBRefの使用を必要とするいくつかの状況に遭遇しました。ただし、参照されているドキュメントの一部のフィールドをDBRef自体にキャッシュしたいと思います。

{$ref:'user', $id:'10285102912A', username:'Soviut'}

たとえば、ユーザードキュメントが参照されている場合でも、ユーザー名を使用できるようにしたい場合があります。これにより、単一のドキュメントアプローチのすべての利点が得られます。クエリを高速化し、コードで手動の間接参照を行う必要をなくします。同時に、意味のある場所で参照を使用できるようにします。

参照されるドキュメントが更新されると(たとえば、ユーザーが名前を変更すると)、私のビジネスレイヤーはそれを参照するすべてのドキュメントを自動的に更新できるという考え方です。

最終的に、DBRefに追加のフィールドを格納するのに適した形式と見なされるかどうか疑問に思っていますか?それは何かを壊しますか?参照が書き換えられるたびにデータが失われますか?pymongoのようなドライバーはそれをサポートしますか?

4

1 に答える 1

5

最終的に、DBRefに追加のフィールドを格納するのに適した形式と見なされるかどうか疑問に思っていますか?

「キャッシュ」フィールドと「参照」フィールドを別々にすると、よりクリーンになる可能性があります...データがどのようなものかによって異なります。

参照が書き換えられるたびにデータが失われますか?

できますが、注意すればできません。DB refサブオブジェクトを更新する場合は、サブオブジェクト全体を上書きするのではなく、更新する特定のフィールドを更新していることを確認してください。

参照は単なる通常のオブジェクトであることに注意してください。データベース参照は標準であり、特別なタイプではありません。

pymongoのようなドライバーはそれをサポートしますか?

ドライバーの間接参照ヘルパーは引き続き機能します。ヘルパーは、$refフィールドと$idフィールドを使用してfindOneを実行するだけです。

于 2010-05-24T11:30:46.173 に答える