MongoDB - просмотр неудачных команд - PullRequest
2 голосов
/ 05 июня 2019

Зарегистрированы ли сбойные команды (вставки, обновления, удаления и т. Д.) В любом месте с помощью Mongo DB?

Я использую драйвер C #, и некоторые команды перестают работать (например, вставки) из-за дублирования уникального ключа (обеспечиваетсяиндекс), поэтому я хочу ретроспективно увидеть, какие документы были вставлены.
Я хотел бы видеть необработанные документы, которые не удалось, после того, как драйвер их сериализовал.

Кстати, насколько я понимаюОперационный журнал Mongo содержит только успешные команды.

1 Ответ

1 голос
/ 05 июня 2019

Записаны ли где-нибудь сбойные команды (вставки, обновления, удаления и т. Д.) В БД Mongo?

Не думаю, что это так, но, возможно, я еще не слишком старался, чтобы найти их.

Однако вы можете зарегистрировать их в приложении, установив ClusterConfigurator на MongoClientSettings, как этот

           //Build the initial settings from the MongoConnectionString
        MongoClientSettings settings = MongoClientSettings.FromConnectionString("MongoConnectionString");

        //Subscribe on the following events
        settings.ClusterConfigurator += cb =>
            {
                cb.Subscribe(delegate (CommandStartedEvent startedEvent) { Console.WriteLine($"Started: {startedEvent.Command} with OpId: {startedEvent.OperationId}"); });
                cb.Subscribe(delegate (CommandSucceededEvent succeededEvent) { Console.WriteLine($"Succeeded OpId: {succeededEvent.OperationId}"); });
                cb.Subscribe(delegate (CommandFailedEvent failedEvent) { Console.WriteLine($"Failed OpId: {failedEvent.OperationId}"); });
            };

        //Builld a MongoClient with the new Settings
        var client = new MongoClient(settings);

В этом примере будут записываться только те команды, которые ожидаются, и если идентификатор операции был неудачным или успешным.

Но с этого момента вы можете расширять ее, отслеживая, какая команда была запущена и на каком OperationId она выполняется.

Для завершенного примера вы можете увидеть это Суть (так как здесь слишком много кода для размещения).

Что можно назвать так:

        var settings = MongoClientSettings.FromConnectionString("MongoConnectionString");
        new MongoTracking().ConfigureTracking(settings);

        var client = new MongoClient(settings);

Для записи это делает запись в приложении, а не в базе данных.

...