2017-03-14 3 views
0

내가 차트 레이블을 얻기 위해 MongoDB의 컬렉션을 반복 싶지만 형식 오류 얻을 :유성, ChartsJS 및 MongoDB를

: 정의되지 않은 것은 객체가 아닌 (평가 '팀을 [I] .name을')가 여기 내 코드입니다
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; 
});