2013-02-07 35 views
0

我想輸出只是hometeam名稱的頁面,以便我可以嘗試瞭解如何更好地處理我的代碼。它只打印一個團隊到頁面,並將該團隊的所有細節打印到頁面,而我只希望打印一個部分。Mongoose .populate()只顯示1個文檔

這是我的代碼,我希望它打印的名字的每個hometeam的頁面

app.get('/home', function(req, res) { 
    Match.findOne({}).populate('hometeam.name').exec(function(err, teams){ 
     util.log(teams); 
     res.send(teams); 
    }); 
    }); 

但是當我加載頁面我得到的是數據從比賽

這個列表中的第一塊
[ 
    { 
    "hometeam": "5106e7ef9afe3a430e000007", 
    "_id": "5113b7ca71ec596125000005", 
    "__v": 0, 
    "key": 1360246730427 
    }, 
    { 
    "hometeam": "5113c13e0eea687b28000001", 
    "_id": "5113e951354fe70330000001", 
    "__v": 0, 
    "key": 1360259409361 
    }, 
    { 
    "hometeam": "5113c13e0eea687b28000001", 
    "_id": "5113e999354fe70330000002", 
    "__v": 0, 
    "key": 1360259481412 
    } 
] 

另外,如果我試圖把util.log(teams.hometeam.name)我得到如下:

TypeError: Cannot call method 'toString' of undefined 

但我希望它能夠打印屬於這裏的hometeam的名稱。由於hometeam只是我數據庫中Team的objectId,我在這裏錯過了DBreferencing的一些東西嗎?

更新:

團隊架構

var Team = new Schema({ 
    'key' : { 
    unique : true, 
    type : Number, 
    default: getId 
    }, 
    'name' : { type : String, 
       validate : [validatePresenceOf, 'Team name is required'], 
       index : { unique : true } 
      } 
}); 

module.exports.Schema = Team; 
module.exports.Model = mongoose.model('Team', Team); 

匹配模式

var Team = require('../schemas/Team').Schema; 

var Match = new Schema({ 
    'key' : { 
    unique: true, 
    type: Number, 
    default: getId 
    }, 
    'hometeam' : { type: Schema.ObjectId, ref: 'Team' }, 
    'awayteam' : { type: Schema.ObjectId, ref: 'Team' } 
}); 

module.exports = mongoose.model('Match', Match); 

回答

0

填充是在試圖檢索屬性的屬性名稱。這意味着你應該使用'hometeam'而不是'hometeam.name'。但是,您想要檢索團隊的名稱,以便可以過濾該名稱。這個電話會變成..

Match.findOne({}).populate('hometeam', {name: 1}).exec(function(err, teams) 

現在你有一個名爲'hometeam'的屬性,在那個名稱。玩得開心:)

編輯

顯示如何在多個文件的單個實例貓鼬有模式的正確定位。

app.js

var mongoose = require('mongoose'); 
var Team = require('./schemas/team-schema')(mongoose); 
var Match = require('./schemas/match-schema')(mongoose); 
// You can only require them like this ONCE, afterwards FETCH them. 
var Team = mongoose.model('Team'); // LIKE THIS 

模式/匹配schema.js

module.exports = function(mongoose) { 
    var Match = new mongoose.Schema({ 
     'key' : { 
      unique: true, 
      type: Number, 
      default: getId 
     }, 
     'hometeam' : { type: mongoose.Schema.ObjectId, ref: 'Team' }, 
     'awayteam' : { type: mongoose.Schema.ObjectId, ref: 'Team' } 
    }); 
    return mongoose.model('Match', Match); 
}; 

模式/團隊schema.js

module.exports = function(mongoose) { 
    var Team = new mongoose.Schema({ 
     'key' : { 
      unique : true, 
      type : Number, 
      default: getId 
     }, 
     'name' : { type : String, 
      validate : [validatePresenceOf, 'Team name is required'], 
      index : { unique : true } 
     } 
    }); 
    return mongoose.model('Team', Team); 
}; 
+0

感謝回覆。這給了我''hometeam「:null,'在回覆中,仍然只給了我一個數據。請查看原始文章末尾的更新,我不確定爲什麼,但是如果我嘗試打印「hometeam」的名稱,則出現該錯誤,「hometeam」存儲「Team」的「ObjectId」存儲在那裏。那麼我將如何去取回那個'團隊'的名字? – germainelol

+0

@germainelol你願意更新你的問題與團隊和匹配的計劃?可能有一個錯誤的引用(ref變量)或者指向的ObjectId不存在。我懷疑前者,但這兩者都可能是一個問題。 –

+0

我已經這樣做了,感謝您的幫助。 – germainelol