2013-11-28 1 views
1

나는 이것이 근심 문제라는 것을 알고 있지만 iron 라우터의 경로에서 문서의 값을 업데이트하는 방법을 알아 내려고하고 있습니다. 함수를 넣는 데 필요한 지점을 찾았지만 작동 시키려면 필요한 몽고 코드로 고생하고 있습니다.iron-router 함수에서 doc 값을 업데이트하는 방법

링크를 클릭 할 때마다 views 요소를 증가 시키려고하므로 경로에 다음 코드를 추가해야합니다.

data: function() { 
     var project = projectDocs.findOne(this.params._id); 
     // need to increment views value by one 
     console.log(project.views); 
     projectDocs.update({id: project.id}, 
     {$inc: {views: 1}} 
    ); 
     console.log(project.views); 
     return project; 
    } 

    }); 

project.views 값은 올바른 값을 반환하지만 값을 업데이트하는 코드는 현재 예외를 throw합니다.

나는 함수 내에서 변수를 증가시키는 project.views ++의 간단한 것을 시도했지만, 결코 데이터베이스에 푸시되지 않는다.

누군가 내가이 가치를 얻는 데 필요한 방향으로 나를 가리킬 수 있습니까? (그리고 이것을 수행하기에 적합한 곳입니까?).

감사합니다.

피터.

OK, 나는 나에게 당신은 (내가 보인다 문자열로이 있었다.

을 숫자 값을 inc를 할 수 있다고 설명하는 방식 http://books.google.com.au/books?id=uGUKiNkKRJ0C&pg=PA37&lpg=PA37&dq=Cannot+apply+$inc+modifier+to+non-number&source=bl&ots=h7qyOddRsf&sig=EWFw9kNLGHoFEUS-nTNsBStDRcQ&hl=en&sa=X&ei=cRGXUse0DNGciAfk6YHgCA&ved=0CFcQ6AEwBQ#v=onepage&q=Cannot%20apply%20%24inc%20modifier%20to%20non-number&f=false의 일부를 이끌가이 링크를 발견 이제 문제는 내가하는 것이다 무한 루프에있을.

this.route('projectPage', { 
    path: '/projects/:_id', 
    waitOn: function() { 
     return Meteor.subscribe('singleProject', this.params._id); 
    }, 
    data: function() { 
     var project = projectDocs.findOne(this.params._id); 
     // need to increment views value by one 
     console.log("Views", project.views); 
     console.log("Project", project); 
     projectDocs.update(project._id, 
     {$inc: {views: 1}} 
    ); 
     console.log(project.views); 
     return project; 
    } 

    }); 

왜이 반복 될 것 같은

기능은 이제 보인다? 대신 ID의

답변

0

사용 _id. 그래서

 projectDocs.update({_id: project._id}, 
     {$inc: {views: 1}} 
    ); 

그렇지 않은 경우 어떤 예외가 발생해도 답변을 업데이트 할 수 있습니다.

+0

OK, 당신이 여기 가지고 '/ projectDocs/업데이트' 오류를 호출의 효과를 시뮬레이션하면서 콘솔에 던져 예외가 "예외 무엇에 맞게 코드를 변경 : 비 수 에 $ INC 수정을 적용 할 수 없습니다 \t ... r ("비 수정 번호에 $ inc 수정 기호를 적용 할 수 없습니다.);" 전체 코드가 뒤 따른다. –

+0

보기 필드는 숫자가되어야합니다. 예외는 모두 예외입니다. 수정하고 업데이트가 작동해야합니다. – landland

0

철제 라우터에 대한 환상적인 새로운 문서를 조금 더 읽고 $ inc 함수를 언로드 후크로 옮기면 모든 것이 잘된 것처럼 보입니다.

this.route('projectPage', { 
    path: '/projects/:_id', 
    waitOn: function() { 
     return Meteor.subscribe('singleProject', this.params._id); 
    }, 
    data: function() { 
     return projectDocs.findOne(this.params._id); 
    }, 
    unload: function() { 
     var project = projectDocs.findOne(this.params._id); 
     // need to increment views value by one 
     projectDocs.update(project._id, 
     {$inc: {views: 1}} 
    ); 
    } 
    // could possibly use layout: popup_layout? here 
    }); 

이 내가이 일을해야하는 위치를 실제로 몇 가지 확인을 싶어요 (그리고 조금 많은 "findOne"의 일을 할 비효율적으로 보인다)하지만이 순간을 위해 일하고.