Крюки Meteor Collection не работают для внешних модификаций БД

У меня есть куча датчиков, разбросанных вокруг.

Эти датчики передают свое состояние всякий раз, когда обнаруживают изменения в окружающей среде.

Данные отправляются на сервер (созданный с использованием Java), где он обрабатывает эту информацию, а затем вставляет ее в mongoDB.

Мое приложение Meteor - это, по сути, информационная панель для этой информации. Я хотел бы выполнить дальнейшую обработку этих записей, как только они появятся (аналитика).

Я начал использовать Collection-Hooks, который очень хорошо работает, когда приложение Meteor вносит изменения в базу данных, но не когда это делает Mongo Java-Driver.

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

1 ответ

Решение

То, что вы хотите использовать, - это наблюдатель на курсоре, возвращаемом из запроса: https://docs.meteor.com/api/collections.html

myCollection.find().observe({
  added(document) {
    // Do something with new document
  },
  changed(document) {
    // Update analytics in response to change
  },
  removed(oldDocument) {
    // Update analytics in response to change
  }
});

Это будет зависеть от содержимого фактической базы данных, в отличие от хуков сбора, которые работают только при вызове кода Meteor

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

var date = moment().utc().format("YYYY-MM-DD HH:mm:ss.SSS"); 
log.find({ createdAt: { $gte: date } }).observe({
  added(document) { 
    console.log("new document added!"); 
  }, 
}); 
Другие вопросы по тегам