2015-08-16 10 views
5

Ich bin mir bewusst, wie eine Eins-zu-Beziehung zwischen Mungo Entitäten, mit dem folgenden Codetyp einzurichten:One-to-One Beziehung mit Mungo?

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

Aber was, wenn ich will nur eine Beziehung einer Eins-zu-Eins-haben - Solche Welcher Client ist mit diesem Benutzer verwandt?

+3

Verwenden Sie dann einfach kein Array. – qqilihq

+0

Danke, aber das hilft nicht wirklich - ich bin neu in der Verwendung von Knoten und Mungo, daher ist mir die Syntax fremd. – Slippy

Antwort

5

Zunächst einmal gibt es einen großen Unterschied zwischen den Beziehungen in MongoDB und denen in SQL-basierten Datenspeichern (Sie müssen dies von Anfang an klar sein).

Beziehungen in MongoDB sind nur Darstellungen verwandter Daten. Es gibt keinen Mechanismus, der die Integrität dieser Beziehungen aufrechterhält.

Was Mungoose mit Refs tut, verwenden Sie einfach das Feld mit der ref Option, um das _id Feld der Dokumente in der referenzierten Sammlung abzufragen. Dies wird für Vorgänge wie populate verwendet (die intern findById Abfragen für die Zielsammlung aufrufen und das referenzierte Feld durch die Dokumente ersetzen).

Wenn diese Option deaktiviert ist, können Sie eine oder mehrere IDs für die referenzierte Sammlung im Feld speichern und so Eins-zu-Eins oder Eins-zu-Viele-Beziehungen erstellen.

also eine einzige ID für eine referenzierte Sammlung zu speichern, würde die Syntax sein:

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

Auf die gleiche Weise können Sie viele IDs für die jeweilige Sammlung wie so speichern kann:

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

EDIT:

Stellen Sie sicher, dass Sie am Anfang das Mongoose-Modul require d haben.

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

Wenn ich das tue, erhalte ich den folgenden Fehler: "Referenzfehler: ObjectId ist nicht definiert" – Slippy

+0

@Slippy überprüfen Sie bitte die Bearbeitung. – ZeMoon

+0

Ich habe es benötigt. Aber es funktioniert nicht. – Slippy