2014-05-23 13 views
6

Pozwól mi zacząć od stwierdzenia, że ​​jestem świadomy metody zaludnienia, którą oferuje mangusta, ale ponieważ moja praca postanowiła przenieść się do macierzystych sterowników mongodów w przyszłości nie mogę już polegać na zaludnieniu, aby uniknąć pracy dla siebie.Co to jest najlepsza praktyka "łączenie" paczki wartości w mangusta/mongodb bez zaludnienia

Jeśli mam dwa zbiory dokumentów

People 
{_id:1, name:Austin} 
{_id:2, name:Doug} 
{_id:3, name:Nick} 
{_id:4, name:Austin} 

Hobbies: 
{Person: 1, Hobby: Cars} 
{Person:1, Hobby: Boats} 
{Person:3, Hobby: Chess} 
{Person:4, Hobby: Cars} 

Jak mam iść na temat przystąpienia każdy dokument w ludzi z hobby. Idealnie wolałbym tylko raz połączyć się z bazą danych dwa razy, aby zdobyć ludzi i po raz drugi, aby uzyskać hobby, a następnie powrócić do obiektów aplikacji klienckiej z nimi połączonymi doeghter.

+0

Wykonanie dwóch zapytań dotyczących zakresu przy użyciu identyfikatorów ne w celu zapełnienia drugiego powoduje obniżenie liczby zapytań, ale tworzy więcej końcowych aplikacji roboczych, ale w ten sposób większość ludzi robi to bez zapełniania. – Sammaye

+0

Pamiętaj też, że zapełnianie to w rzeczywistości jedno zapytanie dokument – Sammaye

Odpowiedz

1

To zależy od tego, co jest dla Ciebie najważniejsze. Ogólnie rzecz biorąc, chciałbym powiedzieć, aby osadzić hobby do ludzi, takich jak:

{ 
    "_id":1, 
    "name":"Austin", 
    "hobbies": [ 
    "Cars","Boats" 
    ] 
}, 
{ 
    "_id":2, 
    "name":"Doug", 
    "hobbies": [] 
}, 

{ 
    "_id":3, 
    "name":"Nick", 
    "hobbies": [ 
    "Chess" 
    ] 
}, 

{ 
    "_id":4, 
    "name":"Austin", 
    "hobbies": [ 
    "Cars" 
    ] 
} 

co daje możliwość korzystania z wielu indeks kluczykiem na hobbies i pozwalają zapytaniami tak:

db.daCollection.find({"hobbies":"Cars"}) 

który zwróci obie Austiny jako kompletne dokumenty. Tak, wiem, że będzie dużo zbędnych wpisów. Jeśli spróbujesz temu zapobiec, możesz modelować w następujący sposób:

{ 
    "_id": 1, 
    "name":"Cars" 
},... 

{ 
    "_id":1, 
    "name":"Austin", 
    "hobbies": [ 
    1, ... 
    ] 
} 

, który wymagałby dodatkowego indeksu na polu nazwy hobbystów, aby był skuteczny. Więc kiedy chcesz znaleźć każdą osobę, która jest w samochodach, trzeba by znaleźć _id i kwerendy dla niego jak

db.person.find({"hobbies":1}) 

myślę, że to jest łatwiejsze, bardziej intuicyjne i dla większości przypadków użycia szybciej jeśli używasz osadzanie.

Powiązane problemy