Meteor订阅更改时本地集合中存在重复ID
以下是我的设想: 我有一套日历事件。某些事件附加了重复规则。在客户端订阅事件时,我正在创建一个名为Meteor订阅更改时本地集合中存在重复ID,meteor,minimongo,Meteor,Minimongo,以下是我的设想: 我有一套日历事件。某些事件附加了重复规则。在客户端订阅事件时,我正在创建一个名为LocalEvents的新本地集合。我循环浏览从events集合中发布的所有事件,并在我的本地集合中为每次事件插入一个新文档 这是我的代码和注释 //create reactive variable const searchQuery = new ReactiveVar(null); export default createContainer(({ params }) => { /
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);
我的问题是,当我的订阅发生变化时(通过使用搜索栏),似乎本地集合中仍然保存着一些文档,因为存在重复的事件实例。每次在UI中的搜索栏中按下一个键时,都会设置传递给订阅的参数(searchQuery)——这将创建一个反应式搜索。当我打字的时候,我看到每一个字母都是重复的。它基本上表明本地集合正在重新填充相同的文档,因此它们会一次又一次地重复
如何确保每次searchQuery更改时,容器中的集合都正确清空
提前谢谢
**编辑找到的解决方案**
我添加了我找到的解决方案作为答案对于其他有类似问题的人,我设法找到了解决方案 我补充说
Tracker.autorun(function(allEvents) {
LocalEvents.remove({});
});
现在,只要订阅中的光标发生变化(例如,当用户搜索并更改searchQuery
reactive var时),跟踪器功能就会清除本地集合,然后重新填充