У меня есть угловое приложение, которое при загрузке получает все данные из коллекции атласа mongodb, имеющей около 12К записей, и увеличивается с каждым днем, поэтому большой набор данных.Эти данные загружаются в таблицу из примера.Мы хотим, чтобы все данные всегда были доступны в таблице, чтобы мы могли запрашивать, видеть и запрашивать весь набор данных в памяти.У меня есть две основные проблемы:
Поскольку набор данных большой, загрузка занимает около 10 секунд, и, очевидно, будет увеличиваться по мере получения новых данных.Поэтому я хочу ускорить это
Данные сбрасываются в атлас mondogb из внешнего источника.После загрузки данных на веб-сайт я хочу иметь возможность прослушивать поступающие новые данные и обновлять свой пользовательский интерфейс без необходимости перезагружать страницу из-за пункта 1), который я сделал выше.Как я могу это сделать?
Я изучал различные темы в Интернете, такие как redis с mongodb, также видел этот ответ, в котором говорится о наблюдении за изменениями в коллекции mongodb: Как выслушать изменения в коллекции MongoDB?
С чем мне тяжело работать, так это как реализовать все это вместе, так как я новичок в угловых и этой теме обработки больших данныхустанавливает эффективно.
Ниже приведен фрагмент кода, который загружает данные в таблицу при загрузке страницы.
ngOnInit() {
this.selectedColumns = this.cols;
this.loading = true;
this.handleEventData();
this.setCustomFilters();
}
handleEventData = async function() {
this.eventService.getEvents().subscribe((data: any[]) => {
this.events = this.flattenEventData(data);
this.makeEventDataUserFriendly(this.events);
this.setDistinctOptions(this.events);
this.loading = false;
})
}
<p-table [value]="events" #dt [columns]="selectedColumns" [paginator]="true" [rows]="250" [loading]="loading"
[autoLayout]=true [reorderableColumns]="true" [rowsPerPageOptions]="['250','500','1000']" dataKey="_id"
rowExpandMode="single" selectionMode="single">
А вот код, который вызывается при выполнении this.eventService.getEvents()
.fieldsToIgnore
имеет список полей, которые я не хочу включать в результат.Я использую monk
в качестве моего драйвера БД:
exports.GetEvents = function() {
return db.events
.find({}, {
sort: {
createdAt: -1
},
fields: fieldsToIgnore
})
.then(docs => docs)
.catch();
};