2016-08-17 32 views
2

我一直試圖讓這個填充的東西工作,但我得到的問題,因爲我沒有得到預期的結果,並沒有錯誤的工作。只是一個空陣列。Mongoose populate()返回沒有錯誤的空數組

我的模特兒看起來像這樣。他們各自的文件

var mongoose = require('mongoose');

var upgradeSchema = new mongoose.Schema({ 
    type: { 
    type: String, 
    default: "Any" 
    }, 
    ability: String, 
    ability_desc: String, 
    level: Number, 
    tag: String 
}); 

mongoose.model('Upgrade', upgradeSchema); 

和其他

var mongoose = require('mongoose'); 
var crypto = require('crypto'); 
var jwt = require('jsonwebtoken'); 


var userSchema = new mongoose.Schema({ 
    email: { 
    type: String, 
    unique: true, 
    required: true 
    }, 
    hero: { 
    level: Number, 
    name: String, 
    type: { 
     path: String, 
     heroType: String 
    }, 
    upgrades: [{ 
     type: mongoose.Schema.Types.ObjectId, ref: 'Upgrade' 
    }], 
    unspent_xp: Number, 
    total_xp: Number, 
    }, 
    armyTotal: { 
    type: Number, 
    default: 0, 
    max: 5000 
    }, 
    army:[{ 
    foc_slot: String, 
    unit_name: String, 
    unit_cost: Number 
    }], 
    username: { 
    type: String, 
    required: true, 
    unique: true, 
    }, 
    faction: String, 
    name: { 
    type: String, 
    required: true 
    }, 
    hash: String, 
    salt: String, 
    roles: { 
    type: String, 
    default: 'player' } 
}); 

我試圖做到這一點

module.exports.profileRead = function(req, res) { 


    User 
     .findById(req.payload._id) 
     .populate('hero.upgrades') 
     .exec(function (err, user) { 
     if (err){ 
      console.log(err); 
     } else { 
      res.status(200).json(user); 
      console.log("success"); 
     } 
     }); 
    } 
}; 

這是一個用戶的例子現在

{ 
    "_id" : ObjectId("57b4b56ea03757e12c94826e"), 
    "hash" : "76", 
    "salt" : "2", 
    "hero" : { 
     "upgrades" : [ 
      "57b42773f7cac42a21fb03f9" 
     ], 
     "total_xp" : 0, 
     "unspent_xp" : 0, 
     "type" : { 
      "heroType" : "Psyker", 
      "path" : "" 
     }, 
     "name" : "Jon Doe" 
    }, 
    "username" : "michaelzmyers", 
    "faction" : "Grey Knights", 
    "email" : "[email protected]", 
    "name" : "Michael Myers", 
    "roles" : "player", 
    "army" : [], 
    "armyTotal" : 625, 
    "__v" : 3 
} 

,我我嘗試了一個只包含ObjectId在其中的字符串數組si類似於示例,我也嘗試使用ObjectId(「STRINGHERE」),但沒有運氣。他們都只返回一個空數組。但是,如果我擺脫了填充調用(或更改內容從hero.upgrades填充到英雄,或升級),那麼它只是返回一個字符串數組。我覺得問題在於填充以及我如何使用它。但是,當我在我的數據庫(測試升級)中只進行一次升級時,一切正常。現在沒有用。有什麼想法嗎?如果需要,我很樂意提供更多的代碼。

回答

2

我發現我的一些研究中,這將工作:

User 
    .findById(req.payload._id) 
    .populate({ 
     path: 'hero.upgrades', 
     model: 'Upgrade' 
    }) 
    .exec(function (err, user) { 
    if (err){ 
     console.log(err); 
    } else { 
     res.status(200).json(user); 
     console.log("success"); 
    } 
    }); 
} 

它看起來像當用戶正在給嵌套的對象符號即hero.upgradespopulate方法,貓鼬得到了與檢測參考模型問題。

+0

非常感謝你 –

+0

不客氣;) – kkochanski

+0

我懷疑這個問題是由跨多個文件定義模式引起的。 –

相關問題