Есть ли способ зарегистрировать фактические запросы, создаваемые драйвером С# MongoDB и отправленные на mongodb? Как и в SQL Server, у вас есть SQL Profiler, который показывает вам все входящие запросы.
Профилирование запросов MongoDB при использовании драйвера С#
Ответ 1
db.setProfilingLevel(2);
Ответ 2
Вы можете включить профилирование и просмотреть актуальные запросы в журнале 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);
}
}
Ответ 3
Метод расширения @Andrew предложил бы работать только для запросов FIND. Из 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()})");
}