2017-03-14 145 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; 
});