流星出版物排序

时间:2018-05-23 18:14:10

标签: mongodb reactjs meteor meteor-publications

我有一个Meteor-react应用程序,包含一个包含大量数据的集合。我正在使用分页显示数据。
在服务器端,我只是发布当前页面的数据。

所以,我在服务器端发布了一些数据:

Meteor.publish('animals', function(currPage,displayPerPage, options) {
  const userId = this.userId;
  if (userId) {
    const currentUser = Meteor.users.findOne({ _id: userId });
    let skip = (currPage - 1) * displayPerPage;
    if (displayPerPage > 0) {
      Counts.publish(this, 'count-animals', Animals.find(
        {$and: [
          // Counter Query
        }
      ), {fastCount: true});

  return Animals.find(
     {$and: [
       // Data query
     ]}, {sort: options.sortOption, skip: skip, limit: displayPerPage });
     } else {
       Counts.publish(this, 'count-animals', 0);
       return [];
     }
  }
});


在客户端,我使用跟踪器:

export default AnimalsContainer = withTracker(({subscriptionName, subscriptionFun, options, counterName}) => {
  let displayPerPage = Session.get("displayPerPage");
  let currPage = Session.get("currPage");
  let paginationSub = Meteor.subscribe(subscriptionName, currPage, displayPerPage, options );
  let countAnimals = Counts.get(counterName);
  let data = Animals.find({}).fetch({});
  // console.log(data);
  return {
    // data: data,
    data: data.length <= displayPerPage ? data : data.slice(0, displayPerPage),
    countAnimals: countAnimals,
  }
})(Animals);


问题是:

当我尝试修改客户端的排序选项时,服务器不是从第一个数据中排序(Skippind是第一个数据)。有时从20日开始,有时从10日开始。 类型检查在两侧完成。

1 个答案:

答案 0 :(得分:1)

我能想到的两件事。

  1. 继续关注{sort:options.sortOption,skip:skip,limit:displayPerPage}顺序。据我所知,它按照你放置它的顺序运行。所以它首先排序,然后跳过,然后限制。

  2. 在客户端和服务器上进行排序。当在服务器上进行排序并将其流式传输到客户端时,客户端会保留一个不保证订单的迷你mongo版本。因此,您还需要对客户端进行排序。