我正在尝试为当前单个视图实现上一个和下一个。我有当前的id
和搜索上下文slug
。如何发布和呈现当前文档以及前一个和下一个的链接 - 按搜索上下文过滤并按日期排序?这一定是一个常见的问题,但我找不到有效的方法。
查找selector
可能不应该是id
,而是当前文档的日期。
Meteor.publish('aPix', function(id, slug) {
check(id, String);
if (!slug) {
slug = 'all';
}
// should the selector be the date instead?
var selector = id;
// how find this, next and previous documents only?
return MyPix.find(selector);
});
我有这个,但找不到如何实现它。而且我不确定这是一个好方法:
var dateOfThisDoc = MyPix.findOne(id).uploadedAt;
var nextDateDoc = MyPix.findOne(
{uploadedAt: {$gt: dateOfThisDoc}},
{"metadata.tags": slug}
);
谢谢!
答案 0 :(得分:1)
我不是100%确定你的目标是什么,或者你的日期字段是如何工作的(或者你正在尝试从上一个/下一个记录中显示哪些字段,同时查看当前的记录),但我会尝试答案。
一种方法是在每个文档中存储上一个和下一个文档的关键部分(一种链表方法)。然后你只需要发布当前文档,它会带来你想要在客户端显示的其他数据点(例如,标题)。
从数据库访问角度来看,这可能是最有效的方法,假设您阅读的内容多于添加/删除新文档。但是,维护可能比您想要的更多(取决于新文档插入堆栈中间的方式和频率)。因此,如果您想坚持上述方法并且需要按日期查找前一个和下一个文档,您可以执行以下操作:
MyPix.find(
{
uploadedAt: {$gt: dateOfThisDoc},
"metadata.tags": slug
},{
{sort: {dateField: 1}},
limit:1
}
);
查找当前帖子之后的下一篇文章
MyPix.find(
{
uploadedAt: {$lt: dateOfThisDoc},
"metadata.tags": slug
},{
{sort: {dateField: -1}},
limit:1
}
);
对于前一个。
我认为您需要/希望为每个人单独订阅/发布。
有关排序/过滤语法的详细信息,请参阅http://docs.meteor.com/#/full/find和http://docs.meteor.com/#/full/sortspecifiers。