2

ドキュメントを別のドキュメントにリンク/参照する方法を理解しようとしていますが、ドキュメントや他のソースで多くの情報や例を見つけていません。ドキュメントをリンクする場合、ObjectIDでリンクする必要がありますか、それとも任意のフィールドを使用できますか?元のドキュメントから直接フィールド値を取得する必要がありますか、それともどこからでも同じ値を渡すことができますか?たとえば、UUIDオブジェクトの16進文字列が与えられた場合、uuid1オブジェクトを含むフィールド'GUID'を介して2つのドキュメントをリンクしたいと思います。

 # What is more efficience/the correct way, option 1 or 2?

 # Option 1
 hexString = '5d78ad35ea5f11e1a183705681b29c47'
 newLinkField = { 'linkToSong' : uuid.UUID( hexString ) }
 db.artists.update( { 'name' : 'Bob Dylan' }, { $set : newLinkField }, upsert = False)

 # Option 2
 hexString = '5d78ad35ea5f11e1a183705681b29c47'
 songGUID = db.songs.find_one({ 'GUID' : uuid.UUID( hexString ) }, {'GUID': 1 });
 newLinkField = { 'linkToSong' : songGUID }
 db.artists.update( { 'name' : 'Bob Dylan' }, { $set : newLinkField }, upsert = False)

また、これは実際のリンクを格納しているのですか、それともUUIDオブジェクトの複製だけを格納しているのですか?

4

2 に答える 2

-1

Mongoengineは、箱から出してすぐにモデル間の参照を作成できます。しかし、これはドキュメント指向のデータベースで行うことは本当に悪いことです。DB のスケーリングで問題が発生し、参照に基づいて解決すると、noSQL データベースのパフォーマンスが低下する可能性があるためです。必要なすべてのデータを 1 つのレコードに自由に書き込んでください。たとえば、曲のレコードを作成する必要がある場合は、次のように実行できます。

{'title': 'Black and white', 'singer': 'M Jackson', 'album': 'Some album' and etc}

データのオーバーヘッドを恐れないでください。主にこれらのために設計されたオブジェクト指向の DB です。

于 2012-08-23T08:50:46.907 に答える