Профилирование запросов MongoDB при использовании драйвера C # - PullRequest
14 голосов
/ 08 июня 2011

Есть ли способ регистрировать фактические запросы, которые создаются драйвером MongoDB C # и отправляются на mongodb?Как и в SQL Server, у вас есть SQL Profiler, который показывает вам все входящие запросы.

Ответы [ 3 ]

15 голосов
/ 09 июня 2011

Вы можете включить профилирование и просмотреть фактические запросы в журнале mongodb, как предложено @ pingw33n.

Или вы можете создать метод расширения для коллекции. Найти и записать данные там:

public static class MongodbExtentions
{
    public static MongoCursor<T> FindAsAndLogQuery<T>(this MongoCollection<T> coll, 
                                                                    IMongoQuery query)
    {
        var queryString = query.ToJson();
        //log query here , insert into mongodb, etc ...
        return coll.FindAs<T>(query);
    }
}
15 голосов
/ 09 июня 2011
0 голосов
/ 30 августа 2016

Метод расширения, предложенный Эндрю, будет работать только для запросов НАЙТИ.С MongoDB 3.2 вы можете сделать что-то вроде ниже, что будет работать для всех запросов.

private static void LogQuery<TEntity>(string queryType, FilterDefinition<TEntity> filter,
            UpdateDefinition<TEntity> update, IMongoCollection<TEntity> collection)
            where TEntity : class, new()
        {
            var renderedFilter = filter.Render(collection.DocumentSerializer, collection.Settings.SerializerRegistry);
            var renderUpdate = update.Render(collection.DocumentSerializer, collection.Settings.SerializerRegistry);
            // Log you shell scrip as string to a file or DB
            Log.Debug(
                $"use {collection.Database.DatabaseNamespace.DatabaseName} db.{collection.CollectionNamespace.CollectionName}.{queryType}({renderedFilter.ToJson()},{renderUpdate.ToJson()})");
        }
...