RethinkDB прослушивает изменения в запросе фильтра?

Я не уверен, правильно ли я понимаю фиды изменений... Мне нужно отфильтровать данные на основе текущей даты следующим образом:

r.table("messages")
  .filter(
    r.row("start").lt(r.now().toISO8601())
      .and(r.row("end").gt(r.now().toISO8601()))
  )
  .changes()
  .run(conn, (err, cursor) => {
    if (err) {
      throw err;
    }

    cursor.each(function (err, row) {
      if (err) {
        throw err;
      }

     // do stuff here

    });
  });

});

Возможно ли вообще сделать что-то подобное? Или .changes() будет работать только в том случае, если поле строки обновлено?


person mk-conn    schedule 07.01.2016    source источник


Ответы (1)


Это возможно, и синтаксис правильный.

Тем не менее, просто примечание на случай, если вы пропустите это. r.now() оценивается при первом запуске запроса, а не при текущем времени, когда происходят изменения. r.now() вычисляется только один раз в одном запросе, а возвращаемое значение повторно используется при последующих вызовах: https://www.rethinkdb.com/api/javascript/now/

Changefeeds работает как с вставкой, так и с обновлением. Если вставляемый/обновляемый документ соответствует условию вашего filter, он будет возвращен в курсор. Если это вставка, old_val будет null, если это обновление, то old_val будет старым значением.

person kureikain    schedule 07.01.2016
comment
Хм, хорошо .. так что мне придется запускать этот фильтр в периодическом цикле, верно, и это не должно быть проблемой для переосмысления запуска каждую секунду или около того? - person mk-conn; 08.01.2016
comment
Мне кажется, это неправильный подход. Чего вы пытаетесь достичь? Может быть, мы сможем найти другой способ решения - person kureikain; 08.01.2016
comment
-Спасибо за ваши ответы. Я попытаюсь объяснить, чего я пытаюсь достичь: сообщения имеют свойства start и endtime, которые отражают временные рамки, в которых должно отображаться это сообщение (сообщение будет отправлено потребителю, когда наступит момент времени для его отображения). Итак... Мне нужно что-то, что получает все сообщения в текущий момент времени (периодически), которые соответствуют моменту времени между временем начала и временем окончания. Сообщения могут поступать в любой момент, а также должны быть удалены по достижении конечного времени ... Не знаю, действительно ли это выполнимо с помощью Rethink. - person mk-conn; 11.01.2016