2016-08-01 16 views
0

Ich habe folgende Schemata: User, Tor und LeistungListe der polymorphen Referenzen

Im Benutzer-Schema, ich brauche eine Liste der Elemente, die Benutzer mögen. Ein Gegenstand ist entweder eine Errungenschaft oder ein Ziel.

Also brauche ich so etwas wie diese:

User: { 
    email:  { type: String }, 
    username: { type: String }, 
    password: { type: String }, 
    firstName: { type: String } 
    lastName: { type: String }, 
    likes:  [ { type: ObjectId, ref: 'Goal/Achievement' } ], 
} 

Wie kann ich mehrere Schema in einer einzigen Liste von Objekt-IDs verweisen?

Edit: versuchen, um genauer zu sein ...

Dies ist ein Anwenderbeispiel:

{ 
    email: "[email protected]" 
    username: "juanfuentes" 
    password: "5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8" 
    firstName: "Juan" 
    lastName: "Fuentes" 
    likes: [ 
    ObjectId("579bc55d57fd27f802569061"), 
    ObjectId("5797bc7a86fc997203b52acc"), 
    ObjectId("579bc4fa3fe32af302e098a1"), 
    ObjectId("57968fd0c54d7bb9058fff77") 
    ] 
} 

ObjectId("579bc55d57fd27f802569061") gehört zu einem Ziel

ObjectId("5797bc7a86fc997203b52acc") zu einer Leistung gehört

ObjectId("579bc4fa3fe32af302e098a1") gehört auch zu einem Ziel

ObjectId("57968fd0c54d7bb9058fff77") zu einer Leistung

Also, wenn Gleichen gehört eine Liste der Ziele war, würde ich es wie folgt erklären:

likes: [ { type: ObjectId, ref: 'Goal } ] 

Wenn gerne eine Liste der Erfolge war, habe ich es so erklären würde:

likes: [ { type: ObjectId, ref: 'Achievement' } ] 

Allerdings möchte ich gerne eine Liste der Ziele und Erfolge sein. Und ich weiß nicht, wie ich sowas erklären soll.

+0

OK. Was ist Ihre * spezifische * Frage? – nnnnnn

+0

Wie kann ich mehrere Schemas in einer einzigen Liste von Objekt-IDs referenzieren? –

+0

Also, das oben gezeigte Objekt ist etwas wie die erwartete Ausgabe, wo "ref" entweder "Ziel" oder "Leistung" ist?Wie sieht die Eingabe aus? – Wolfgang

Antwort

0

Verwenden Sie DBRef Es ist ein Objekt, das aus einer Dokument-ID, einem Namen der Sammlung, in der sich das referenzierte Dokument befindet, und optional einem Datenbanknamen besteht.

0

Es scheint mir, dass Sie nach einer Viele-zu-Viele Beziehung zwischen Benutzer und Ziel/Leistung suchen.

In diesem Fall besteht eine gute Methode darin, zwei zusätzliche Schemas zu erstellen, um Ihren Benutzer mit den Ziel- und Achievement-Tabellen zu verknüpfen. etwa so:

Extra-Schema 1:

UserLikedGoals: { 
    userId: { type: ObjectId, ref: 'User' }, 
    goalId: { type: ObjectId, ref: 'Goal' }, 
} 

Extra-Schema 2:

UserLikedAchievements: { 
    userId: { type: ObjectId, ref: 'User' }, 
    achievementId: { type: ObjectId, ref: 'Achievement' }, 
} 

Sie würden die gemocht Ziele zugreifen/Leistungen eines bestimmten Benutzers durch die Suche nach Zeilen dieses Benutzers ID enthalten in die neuen Schemata.