我只是想检查,因为我没有在文档中看到它。也许我只是错过了它。
据我所知,如果我订阅了skip,那么我不会跳过客户端。正确的吗?
我正在使用铁路由器。我有这样的代码
Router.route('/docs/:_page', {
template: 'doclist',
subscriptions: function() {
var page = parseInt(this.params._page) - 1;
var skip = page * 10;
var limit = 10;
return Meteor.subscribe("pages", skip, limit);
},
});
相应的发布就是这个
Meteor.publish("pages", function (skip, limit) {
return Docs.find({}, {skip: skip, limit: limit});
});
但是现在在模板助手中我没有使用跳过AFAICT,因为MiniMongo中只有limit
个结果
Template.doclist.helpers({
docs: function () {
var route = Router.current();
var pageId = parseInt(route.params._page) || 1;
var page = pageId - 1;
var skip = page * 10;
return Docs.find({}, {
// skip: skip
limit: limit,
});
},
});
似乎有效。如果我在skip
行中发表评论,那么我在第2页就没有结果。
这是正确的还是我做错了什么?
答案 0 :(得分:1)
您是对的 - 在这种情况下,客户端不需要skip
。假设您在DB中有100个文档,并且您跳过前20个,限制为10.然后客户端上只存在10个文档。每当你find
在客户端(在你的模板中),你正在查询本地数据库(在这种情况下是10个文档),所以跳过是不合适的。
我要提醒的是,所有这一切都取决于您对Docs
的只有订阅的概念。要扩展上面的示例,如果您在另一个订阅的客户端上的同一集合中有另外15个文档,那么您可能需要进行一些额外的过滤,以便仅显示您感兴趣的那些。