2016-08-01 43 views
0

我有以下模式:用戶,目標和成就多態引用列表

在用戶架構中,我需要一個用戶喜歡的項目列表。一個項目既可以是成就也可以是目標。

所以我需要的東西是這樣的:

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

如何可以引用多個模式中的對象ID的一個列表?

編輯:想更具體的...

這是一個用戶例子:

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

ObjectId("579bc55d57fd27f802569061")屬於目標

ObjectId("5797bc7a86fc997203b52acc")屬於成就

ObjectId("579bc4fa3fe32af302e098a1")也屬於一個目標

ObjectId("57968fd0c54d7bb9058fff77")屬於成就

所以,如果喜歡的是制定一系列目標,我將宣佈這樣的:

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

如果喜歡是成就的清單,我會宣佈這樣的:

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

但是,我希望喜歡成爲目標和成就的列表。我不知道如何宣佈這樣的事情。

+0

確定。那麼你的*具體*問題是什麼? – nnnnnn

+0

如何在單個對象標識列表中引用多個模式? –

+0

因此,上面顯示的對象與預期的輸出一樣,其中「ref」是「目標」或「成就」?輸入是什麼樣的? – Wolfgang

回答

0

使用DBRef它是一個由文檔ID,引用文檔所在集合的名稱以及可選的數據庫名組成的對象。

0

在我看來,你正在尋找一個用戶和目標/成就之間的多對多關係

在這種情況下,一個好方法是創建2個額外的模式,以便將您的用戶與目標和成就表相關聯;像這樣:

額外模式1:

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

額外的模式2:

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

您將訪問喜歡的目標/通過查找包含該用戶的ID在行某個用戶的成績新的模式。