Meteor Подписаться не обновляет порядок сортировки коллекции

// Snippet from Template
<div class="post-container">
  {{#each elements}}
    {{> post-element this}}
  {{/each}}
</div>

// Snippet from Client 
Meteor.subscribe('thePosts');

// Snippet from Server
Meteor.publish('thePosts', function(){
  return Posts.find({},  {sort:{createdAt:-1}, reactive:true});
});

Когда я...

Posts.insert({body:postBody, createdAt: new Date()});

Добавочный документ добавляется и появляется в конце моего списка, а не в порядке убывания, как указано в моей функции публикации. Любая идея о том, что я делаю неправильно?

Спасибо!

Ответ 1

Функция публикации определяет, какие записи должны быть синхронизированы с базой данных мини-монго любых подписчиков. Поэтому сортировка данных в функции публикации фактически не влияет на клиента, поскольку база данных на стороне клиента, скорее всего, сохранит их каким-либо другим способом.

Конечно, вы можете использовать сортировку в издателе find, чтобы ограничить количество записей в N самых последних - но опять же это просто способ решить, какие записи синхронизироваться, а не как они храниться/использоваться клиентом.

После того, как записи были синхронизированы с клиентом, это зависит от кода шаблона, чтобы определить, как должны отображаться результаты. Например:

Template.myTemplate.elements = function() {
  return Posts.find({}, {sort: {createdAt:-1}});
}

Также см. раздел "Сортировка публикации" моего сообщения в распространенных ошибках.

Ответ 2

Вы не разместили свой код вспомогательного кода шаблона.

Когда вы выполняете return Posts.find() из вспомогательной функции, запрос также должен содержать аргументы сортировки, например, как показано ниже:

Template.myTemplate.elements = function(){
   Meteor.subscribe('thePosts');
   return Posts.find({},  {sort:{createdAt:-1}, reactive:true});
}