Метеоритная сортировка публикаций - PullRequest
0 голосов
/ 23 мая 2018

У меня есть приложение Meteor-реагировать, которое содержит коллекцию, с большим количеством данных.Я отображаю данные с нумерацией страниц .На стороне сервера я просто публикую данные для текущей страницы.

Итак, я публикую некоторые данные на стороне сервера:

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 голосов
/ 24 мая 2018

Две вещи, о которых я могу думать.

  1. Следите за порядком {sort: options.sortOption, skip: skip, limit: displayPerPage}.Насколько я знаю, он работает в том порядке, в котором вы его разместили.Поэтому сначала выполняется сортировка, затем пропускается, а затем ограничивается.

  2. Выполните сортировку как на клиенте, так и на сервере.Когда сортировка происходит на сервере и передается клиенту, клиент имеет версию мини-монго, которая не гарантирует заказ.Поэтому вам также необходимо отсортировать клиента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...