排序和限制不使用Mongo + Meteor

时间:2017-08-30 10:11:09

标签: mongodb meteor angular-meteor minimongo

这是我发布我的收藏集的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我可以看到正确的光标

标题搜索是唯一可行的。

1 个答案:

答案 0 :(得分:2)

首先,根据documentationusing 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等于num3和{ {1}}因此。这3份文件将从本出版物发送到客户收藏。

现在,让我们使用2将新文档添加到此mongo集合中。考虑到您有1作为查询选项,会发生什么?对于包含num: 2.5的{​​{1}}和{ limit: 3 }事件的文档,该发布将向客户发送removed事件。客户端集合将按顺序包含文档:num: 1

在此之后,您在客户端对文档进行排序应该是可以理解的。所以,在上面的代码中应该是:

added

另外,请查看documentation regarding what happens when publication arguments are changed