2017-01-20 3 views
2

У меня есть кусок кода, который хранит информацию о погоде каждые 30 секунд в коллекции MongoDB. Я придумал, как опубликовать данные за последние 24 часа от сервера к клиенту, который идет следующим образом:Как постоянно публиковать последние N записей в Метеор, используя MongoDB?

Сервер

Meteor.publish('mountCarmelData', function dataPublication(){ 
    return MountCarmel.find({}, 
    { 
     limit: 2880//max of 24 hours 
    }); 
}); 

Client

Meteor.subscribe('mountCarmelData'); 

Если новая запись вставлена ​​и общий объем записей в коллекции меньше предела, эта новая запись автоматически отправляется клиенту. Проблема в том, что, когда в коллекции хранится более 2880 записей, новые записи больше не отправляются клиенту.

Я хотел бы знать, есть ли способ всегда отправлять клиенту самые последние 2880 записей. Или, может быть, способ просто отправить вновь вставленную запись на клиентскую сторону.

Мне нужны последние 24 часа данных для построения графика, и мне нужны новые собранные данные (которые сохраняются в коллекции каждые 30 секунд) для динамического обновления переменных погоды.

ответ

1

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

{ 
    limit: 2800, 
    sort: {createdAt: -1} 
} 

-1 сортировать по убыванию, начиная от новых и старых.

примечание: этот вид предназначен для публикации, чтобы обеспечить публикацию данных, которые вы хотите предоставить клиенту. если вашему клиенту нужны данные в другом порядке (т. е. нисходящий не является правильным выбором там), тогда клиент может сортировать опубликованные данные, но это необходимо.

+0

спасибо! Ваш ответ был очень полезен, особенно ваша «заметка». –

Смежные вопросы