这是我发布我的收藏集的publish.js
文件:
const tags = Tags.find({title: {
$regex: `.*${searchString}.*`,
$options: 'i'
}}, {
sort: { counts: -1 }, limit: 3
});
console.log(tags.count());
return tags;
这是我订阅此系列的组件:
this.tagsSubscription = this.subscribe('tags', () => [this.tag], function (err) {
that.tags = Tags.find().fetch();
});
因此我得到了两个不同的错误:
排序和限制不起作用:我有时会得到3个以上的结果而且没有按照'
回调无法正常工作。它太快了,我在客户端和服务器上获得了不同的结果。我尝试过这种方式,onSuccess()
和Meteor.autorun()
,但没有运气。如果我使用setTimeout
我可以看到正确的光标
标题搜索是唯一可行的。
答案 0 :(得分:2)
首先,根据documentation,using System.Net.Http
会忽略.count()
和.skip()
的效果,例如,如果您总共有100条记录,那么您的查询选项有.limit()
,然后{ limit: 3 }
此光标将返回.count()
而不是100
。
其次,查看您的代码我假设您的出版物至少需要一个参数:3
。但是订阅它的代码没有通过它。我认为它应该是这样的:
searchString
最后,服务器端排序不会影响客户端集合中的文档排序。
例如,我们假设您已找到Meteor.subscribe('tags', this.tag, () => {
that.tags = Tags.find().fetch();
});
的查询,并且有3个文档符合此条件,{ num: { $gte: 1 } }
s等于num
,3
和{ {1}}因此。这3份文件将从本出版物发送到客户收藏。
现在,让我们使用2
将新文档添加到此mongo集合中。考虑到您有1
作为查询选项,会发生什么?对于包含num: 2.5
的{{1}}和{ limit: 3 }
事件的文档,该发布将向客户发送removed
事件。客户端集合将按顺序包含文档:num: 1
。
在此之后,您应在客户端对文档进行排序应该是可以理解的。所以,在上面的代码中应该是:
added
另外,请查看documentation regarding what happens when publication arguments are changed。