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