2017-03-14 175 views
0

我想通過MongoDB的集合迭代獲得圖表標籤,但我得到的類型錯誤:未定義不是對象(評估「團隊[I]。名稱」)這裏是我的代碼:流星,ChartsJS和MongoDB

var teams = Teams.find(); 
var teamNames = [10]; 

for(i = 0; i < 10; i++) 
{ 
    teamNames.push(teams[i].name); 
} 

var chart = new Chart(canvas, { 
    type: 'bar', 
    data: { 
     labels: [teamNames] 

....

任何有什麼建議嗎?我正在用盡想法。 預先感謝您。

+0

我覺得'Teams.find()'返回一個遊標。嘗試'Teams.find()。fetch()'來獲取對象。更多https://docs.meteor.com/api/collections.html#Mongo-Collection-find – Veeram

回答

0

teams必須有少於10個項目的長度。如果teams[{name: "first"}],那麼teams[1]將返回undefined,您將得到該錯誤。您可以使用:

for (let i = 0; i < teams.length; i++) 

解決此問題。

map在陣列上可以得到特定屬性:

labels: teams.map(team => team.name), 
+0

這不起作用... TypeError:undefined不是一個對象(評估'teams [0] .name') –

+0

@KlaudiaBojda在這種情況下'teams'不是一個數組。我認爲問題在於你必須調用由'.find'返回的遊標方法 –

1

你可以做到這一點

var teamNames = Teams.find().map(
    function(team){ 
     return team.name; 
    } 
) 
0

流星,集合.find()函數返回一個cursor然後你可以用它來對收集物品執行操作。在你的情況下,你將光標看作是不正確的數組。有幾種不同的方法可以解決這個問題。

1)使用.forEach()遍歷遊標。

var teamNames = []; 

Teams.find().forEach(function (e) { 
    teamNames.push(e.name); 
}); 

2)使用.fetch()返回數組中的所有匹配文檔,然後遍歷這一點。

var teams = Teams.find().fetch(); 
var teamNames = []; 

for(i = 0; i < teams.length; i++) { 
    teamNames.push(teams[i].name); 
} 

3)使用.map()遍歷集合呼籲所有項目的回調並返回一個數組。

var teamNames = Teams.find().forEach(function (e) { 
    return e.name; 
});