2015-08-16 11 views
5

Jestem świadomy tego, jak założyć jeden do wielu relacji między podmiotami Mangusta, z następującym rodzajem kodu:Relacja jeden-do-jednego z mangustą?

friends: [{type: ObjectId, ref: 'User'}] 

Ale co, jeśli chcę tylko mieć relację jeden-do-jednego - Taka do jakiego klienta jest powiązany ten użytkownik?

+3

Po prostu nie używaj tablicy. – qqilihq

+0

Dzięki, ale to naprawdę nie pomaga - jestem nowy w używaniu węzła i mangusty, więc składnia jest mi obca. – Slippy

Odpowiedz

5

Przede wszystkim istnieje olbrzymia różnica między relacjami w MongoDB i danymi w bazach danych SQL (musisz mieć jasność co do tego od samego początku).

Relacje w MongoDB to tylko reprezentacje powiązanych danych. Nie ma mechanizmu, który zachowałby integralność tych relacji.

To, co robi mangusta z refingami, to skorzystanie z pola z opcją ref w celu przeszukania pola _id dokumentów w zbiorze odniesienia. Ta funkcja jest używana do operacji takich jak populate (która wewnętrznie wywołuje zapytania w kolekcji docelowej i zastępuje odwołane pole dokumentami).

W ten sposób można zapisać jeden lub wiele identyfikatorów dla przywoływanej kolekcji w polu, tworząc w ten sposób "relacje" jeden do jednego lub jeden do wielu.

Tak, aby zapisać pojedynczy identyfikator dla wskazanej kolekcji, składnia będzie:

client: {type: Mongoose.Schema.Types.ObjectId, ref: 'Client'} //No arrays, as we want to store a single ID only. 

W ten sam sposób można przechowywać wiele identyfikatorów dla wskazanej kolekcji tak:

friends: [{type: Mongoose.Schema.Types.ObjectId, ref: 'User'}] //The array stores multiple IDs, creating a one-to-many "relationship" 

EDYTOWANIE:

Upewnij się, że na początku masz moduł Mongoose require.

var Mongoose = require('mongoose'); 
+0

Gdy to zrobię, pojawia się następujący błąd: "Błąd odniesienia: ObjectId nie jest zdefiniowany" – Slippy

+0

@Slippy proszę sprawdzić edycję. – ZeMoon

+0

Potrzebowałem tego. Ale to nie działa. – Slippy