所以我是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?
答案 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
}
});
}
});