как использовать метеоры collection.find() вместе с сортировкой, пропуском и ограничением

Я пишу программу чата, используя Meteor. Мне нужно показать 10 самых последних сообщений в порядке возрастания.

Messages.find({...}, {sort: {created: 1}, skip: getMessageCount()-10, limit: 10});

Этот код показывает мне только первые 10 сообщений.

Работает ли параметр пропуска в Метеоре, и я допустил ошибку, или есть какие-то известные ошибки?


person net.user    schedule 01.02.2013    source источник


Ответы (2)


Причина, по которой он возвращает первые 10 сообщений: {sort: {created: 1}} , которые возвращаются в порядке возрастания значения атрибута created.

Вы должны написать {sort: {created: -1}}, т.е. записи с более высоким значением created будут возвращены первыми.

Кроме того, предполагая, что created содержит действительное значение даты вместе с отметкой времени, вы должны вставить его parsed значение, чтобы эффективно выполнять сортировку по дате.

person sohel khalifa    schedule 01.02.2013
comment
Спасибо за ваш ответ. это была опечатка в моем посте. в моем кодовом файле у меня есть code{sort: {created: -1}}code. но это дает мне последнее сообщение в первой позиции. что я действительно хочу, так это последнее сообщение на последней позиции (внизу), чтобы у меня были последние 10 сообщений на моем сайте (сортировка: по возрастанию) и пропуск остальных. я надеюсь, что это было хорошо понять. :) - person net.user; 01.02.2013

Вам просто нужно сформировать на сервере

Messages.find({...}, {sort: {created: -1}, limit: 10});

А потом на клиенте

Messages.find({...}, {sort: {created: 1}})

Что здесь произойдет:

  1. Вы получаете от Монго разбиение на 10 последних сообщений, но в неправильном порядке.
  2. Вы запускаете форматирование правильного порядка на клиенте
person Konstantin Victorov    schedule 26.03.2016