Вот мой сценарий:
У меня есть коллекция событий календаря. К некоторым событиям привязано правило повторения. Когда я подписываюсь на события в клиенте, я создаю новую локальную коллекцию с именем LocalEvents. Я перебираю все свои события, опубликованные из коллекции Events, и вставляю новый документ в свою локальную коллекцию для каждого появления моего события.
Вот мой код с комментариями
//create reactive variable
const searchQuery = new ReactiveVar(null);
export default createContainer(({ params }) => {
//subscribe to subscription passing the reactive var as the variable
const subscription = Meteor.subscribe('Events.publications.admin.list.all', searchQuery.get());
const loading = !subscription.ready();
const allEvents = Events.find();
//loop through cursor, if event recurs - create new document for the event and insert it in to LocalEvents collection
allEvents.forEach(function(event) {
if (event.eventRecurs) {
//grab array of all recurring dates
const dates = event.recurringDates;
//loop through recurring dates and create new event document for each with a random ID and a parentId of the original event
_.each(dates, (date) => {
LocalEvents.insert({
'_id': Random.id(),
'name': event.name,
'description': event.description,
'defaultDate': date,
'parentId': event._id
});
})
} else {
//if event doesn't recur, set parentId and insert into local collection
event.parentId = event._id;
LocalEvents.insert(event);
}
});
const events = LocalEvents.find({}, { sort: { defaultDate: 1 }}).fetch();
//pass everything to the component
return { loading, events, searchQuery };
}, AdminEventsAll);
Моя проблема заключается в том, что когда моя подписка изменяется (с помощью панели поиска), кажется, что локальная коллекция все еще содержит некоторые документы, поскольку в ней повторяются экземпляры событий. Аргумент, который я передаю своей подписке (searchQuery), устанавливается каждый раз, когда нажимается клавиша в строке поиска в моем пользовательском интерфейсе — это создает реактивный поиск. Когда я печатаю, для каждой буквы, которую я печатаю, я вижу дубликаты документов. В основном это показывает, что локальная коллекция пополняется одними и теми же документами, поэтому они повторяются снова и снова.
Как я могу убедиться, что коллекция правильно очищается в моем контейнере каждый раз, когда изменяется поисковый запрос?
заранее спасибо
** РЕДАКТИРОВАТЬ - НАЙДЕНО РЕШЕНИЕ **
Я добавил решение, которое нашел в качестве ответа