2013-11-28 47 views
1

我知道這是一個問題,但我正在努力解決如何更新鐵路由器中路由文檔中的值。我發現了我需要放置這個函數的地方,但是我爲了使它工作需要使用mongo代碼而掙扎。如何從鐵路由器功能更新文檔值

我想增加一個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值正在返回正確的值,但此時更新值的代碼會引發異常。

我試過project.views ++這個簡單的東西,它在函數內增加了變量,但它永遠不會被推送到數據庫(我猜想沒有任何意外)。

有人可以指出我需要的方向來獲得這個值嗎(這是甚至是這樣做的正確的地方?)。

謝謝。

Peter。

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; 
    } 

    }); 

爲什麼會變成這樣循環?

回答

0

使用_id,而不是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」的),但其工作的時刻。