ここに私のシナリオがあります:Meteorサブスクリプションが変更されたときにローカルコレクションのIDが重複する
私はカレンダーイベントのコレクションを持っています。一部のイベントには、繰り返しルールが設定されています。クライアントのイベントを購読すると、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)に渡す引数は、UIの検索バーでキーが押されるたびに設定されます。これにより、反応的な検索が作成されます。私がタイプするとき、私がタイプする各文字について、私はその文書が重複しているのを見る。それは基本的に、ローカルコレクションが同じ文書を補充しているので、何度も何度も繰り返していることを示しています。
searchQueryが変更されるたびにコレクションがコンテナ内で正しく空になるようにするにはどうすればよいですか?事前
で
おかげ** EDIT - FOUND SOLUTION **
は、私は同様の問題を持っている誰のための答え