2015-05-04 38 views
0

我在MEAN堆棧上構建了一個相當簡單的應用程序,而且我真的超出了我的深度,尤其是涉及貓鼬的時候。我發現貓鼬的文件很難纏繞我的頭,無法在其他地方找到答案。我的問題是這樣的:我有一堆用戶,這些用戶有倉庫,倉庫有倉庫提供者(GitHub,BitBucket等)。Mongoose'populate'not populating

用戶擁有多個存儲庫並且存儲庫具有一個存儲庫類型。

我的用戶文件包含以下內容:

var mongoose = require('mongoose'), 
Schema = mongoose.Schema; 

var UserSchema = new Schema({ 
    name: { 
     type: String, 
     required: true 
    }, 
    email: { 
     type: String, 
     required: true 
    }, 
    repositories: [{ 
     name: String, 
     branches: [{ 
      name: String, 
      head: Boolean, 
      commits: [{ 
       hash: String, 
       date: Date, 
       message: String, 
       contributer: String, 
       avatar: String 
      }] 
     }], 
     repoType: { 
      type: Schema.Types.ObjectId, 
      ref: 'RepoProviders' 
     } 
    }] 
}); 

var User = mongoose.model('User', UserSchema); 

module.exports = User; 

// This is where the magic doesn't happen :(

User.find({ name: "John Smith"}).populate({path: 'repoType'}).exec(function (err, user) { 
    if (err) return handleError(err); 
    console.log(user); 
}); 

RepoProvider.js包含:

var mongoose = require('mongoose'); 
Schema = mongoose.Schema; 

var RepoProviderSchema = new Schema({ 
    name: { 
     type: String, 
     required: true 
    } 
}); 

var RepoProvider = mongoose.model('RepoProviders', RepoProviderSchema); 
module.exports = RepoProvider; 

我創造了蒙戈用戶文檔和手動分配repoType ID散(從現有的repoType採取文件)。

當我CONSOLE.LOG用戶,回購類型設置爲ID,但沒有關係返回:

[ { _id: 5547433d322e0296a3c53a16, 
    email: '[email protected]', 
    name: 'John Smith', 
    __v: 0, 
    repositories: 
    [ { name: 'RepoOne', 
     repoType: 5547220cdd7eeb928659f3b8, 
     _id: 5547433d322e0296a3c53a17, 
     branches: [Object] } ] } ] 

如何正確設置和查詢這種關係?

回答

1

你需要指定在populate方法的完整路徑repoType

User.find({ name: "John Smith"}).populate({path: 'repositories.repoType'}).exec(function (err, user) { 
    if (err) return handleError(err); 
    console.log(user); 
}); 
+0

哦,夥計......你知道多久,我都花在這個?結果就是這個! Ugggh ...我準備好運行回PHP的尖叫。非常感謝您的幫助! – nickspiel

+0

:D Mongoose可能會對稀疏文檔有點混淆,但最近項目已經過渡,新的維護人員正在努力解決這個問題(還有很多其他事情)。 –

+0

啊好消息!通過完整的示例來獲得簡單的「入門指南」確實會有所幫助,但這些都不足以填補目前文檔中出現的空白廢話。 – nickspiel