2014-07-14 78 views
0

所以我是Meteor和MongoDB的新手。在查詢數據庫之後,我目前遇到問題,找到上一個和下一個文檔。用Laravel 4構建一個PHP框架和MySQL,我可以通過行索引id來實現這一點,這個數字就像這樣。流星JS和Mongo DB查找下一個文檔

$previousProjectID = Project::where('id', '<', $project_id)->max('id'); 
$nextProjectID = Project::where('id', '>', $project_id)->min('id'); 

其中'project_id'是當前正在查看的項目。當你點擊下一個或前一個數組時,你將能夠查看相應的項目及其細節。

有沒有人想過如何使用Meteor JS和MongoDB來做到這一點?

回答

0

您可以使用$natural按存儲順序進行排序,但隨着時間的推移不一定會反映插入順序。一般來說,如果您可以通過文檔字段獲得sort,並批量處理方法調用或訂閱中通過limit獲取的內容,則可以很好地模擬下一個/上一個操作。

0

嗯,這是我想通了

Template.portfolioView.helpers({ 
    project: function() { 
    return Projects.findOne({_id: Router.current().params._id}); 
    }, 
    nextproject: function() { 
    if(this.project) { 
     var x = Projects.find({ timestamp : { $gt : this.project.timestamp }}, {limit: 1, sort : { timestamp: 1}}).fetch(); 
     if(x.length < 1) { 
     var y = Projects.find({ }, {limit: 1, sort : { timestamp: 1}}).fetch(); 
     } 
     return x.length > 0 ? x[0]._id : y[0]._id; 
    } 
    }, 
    prevproject: function() { 
    if(this.project) { 
     var x = Projects.find({ timestamp : { $lt : this.project.timestamp }}, {limit: 1, sort : { timestamp: -1}}).fetch(); 
     if(x.length < 1) { 
     var y = Projects.find({ }, {limit: 1, sort : { timestamp: -1}}).fetch(); 
     } 
     return x.length > 0 ? x[0]._id : y[0]._id; 
    } 
    } 
}); 

在路線我必須找到將項目作爲數據變量

this.route('portfolioView', { 
    path: '/portfolio/view/:_id', 
    waitOn: function() { 
     return Meteor.subscribe('projects', this.params._id); 
    }, 
    data: function(){ 
     return {project: Projects.findOne({_id: this.params._id})}; 
    }, 
    onAfterAction: function() { 
     if (!Meteor.isClient) { 
     return; 
     } 
     var project = this.data().project; 
     SEO.set({ 
     title: 'Revolt Visual | '+ project.name, 
     meta: { 
      'description': project.description 
     } 
     }); 
    } 
});