Jawabannya sangat tergantung pada apa yang ingin Anda lakukan dengan data yang Anda simpan di mongodb. Penting untuk diingat bahwa ReferenceField
akan menunjuk ke dokumen dalam koleksi lain di mongodb, sedangkan EmbeddedDocument
disimpan dalam dokumen yang sama dalam koleksi yang sama.
Pertimbangkan skema ini:
Person
-> name
-> address
Address
-> street
-> city
-> country
Jika Anda mengharapkan setiap orang hanya memiliki satu alamat dan setiap alamat hanya dikaitkan dengan satu orang (hubungan satu-ke-satu) dan Anda biasanya akan menanyakan database untuk satu atau lebih Person
dokumen maka bidang Person.address harus EmbeddedDocumentField
.
Jika Anda mengharapkan setiap orang memiliki lebih dari satu alamat tetapi setiap alamat hanya akan dikaitkan dengan satu orang (hubungan satu-ke-banyak) dan Anda masih akan menanyakan Orang, maka Anda dapat menggunakan EmbeddedDocumentListField
.
Jika Anda mengharapkan setiap orang memiliki lebih dari satu alamat dan setiap alamat akan dikaitkan dengan banyak orang (hubungan banyak ke banyak), Anda mungkin harus menggunakan ReferenceField
.
Namun, meskipun Anda one-to-one atau one-to-many, jika Address
adalah bagian dari model data Anda yang menarik maka mungkin menguntungkan untuk menyimpannya dalam koleksinya sendiri karena membuat agregasi dan pengindeksan lebih mudah.
Satu hal lain yang perlu dipertimbangkan adalah bahwa kecuali Anda mengubahnya mati
mongoengine akan menghapus referensi setiap ReferenceField
ketika Anda mengambil dokumen - ini mungkin memperkenalkan hukuman kinerja dengan banyak ReferenceField
atau referensi ke dokumen yang sangat besar.