流星JS和; Mongodb查找下一个文档

时间:2014-07-14 15:58:15

标签: mongodb meteor

所以我是Meteor和MongoDB的新手。在查询数据库之后,我目前在查找上一个和下一个文档时遇到问题。使用Laravel 4一个PHP框架和MySQL,我可以通过行索引id这样做,这就像数字一样。

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

'project_id'是您正在查看的当前项目。当您单击下一个或上一个阵列时,您将能够查看相应的项目及其详细信息。

有没有人想过如何使用Meteor JS和MongoDB?

2 个答案:

答案 0 :(得分:0)

您可以使用$natural按存储顺序排序,但随着时间的推移,这不一定会反映广告订单顺序。一般情况下,如果您可以通过文档字段sort并批量通过方法调用或订阅通过limit获取的内容,则可以很好地模拟下一个/上一个操作。

答案 1 :(得分: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
        }
      });
    }
});
相关问题