Поскольку v.3.4 (я думаю), у MongoDB теперь появился новый оператор конвейера агрегации с именем « facet », который своими словами:
обрабатывает несколько агрегатных конвейеров в течение одного этапа на одном и том же наборе входных документов. Каждый субподвод имеет свое собственное поле в выходном документе, где его результаты хранятся в виде массива документов.
В этом конкретном случае это означает, что можно сделать что-то вроде этого:
$result = $collection->aggregate([ { ...execute queries, group, sort... }, { ...execute queries, group, sort... }, { ...execute queries, group, sort... }, $facet: { paginatedResults: [{ $skip: skipPage }, { $limit: perPage }], totalCount: [ { $count: 'count' } ] } ]);
Результат будет (при этом для 100 итоговых результатов):
[ { "paginatedResults":[{...},{...},{...}, ...], "totalCount":[{"count":100}] } ]
Вы можете иметь свой собственный регистратор, когда вы получите исключение, вы можете написать в журнал событий. Вот небольшой пример.
string cs = "YourIdentifier";
if (!EventLog.SourceExists(cs))
EventLog.CreateEventSource(cs, "Application");
EventLog.WriteEntry(cs, "YourMessage", EventLogEntryType.Error);