Отговорът на това наистина зависи от това какво възнамерявате да правите с данните, които съхранявате в mongodb. Важно е да запомните, че ReferenceField
ще сочи към документ в друга колекция в mongodb, докато EmbeddedDocument
се съхранява в същия документ в същата колекция.
Разгледайте тази схема:
Person
-> name
-> address
Address
-> street
-> city
-> country
Ако очаквате всеки човек да има само един адрес и всеки адрес да бъде свързан само с едно лице (връзка едно към едно) и обикновено ще направите заявка в базата данни за едно или повече Person
документи, тогава полето Person.address трябва да бъде EmbeddedDocumentField
.
Ако очаквате всеки човек да има повече от един адрес, но всеки адрес ще бъде асоцииран само с един човек (връзка „един към много“) и все пак ще търсите основно човек, тогава можете да използвате EmbeddedDocumentListFieldкод> .
Ако очаквате всеки човек да има повече от един адрес и всеки адрес ще бъде свързан с много хора (връзка много към много), вероятно трябва да използвате ReferenceField
.
Въпреки това, дори ако сте един към един или един към много, ако Адресът
е част от вашия модел на данни, който представлява интерес, тогава може да е изгодно да го съхранявате в собствената си колекция, защото улеснява агрегирането и индексирането.
Друг момент, който трябва да имате предвид, е, че освен ако не завъртите изключено
mongoengine ще дереферира всяко ReferenceField
когато извличате документ - това може да доведе до наказания за производителност с много ReferenceField
или препратки към много големи документи.