Profiler становится вашим другом, когда вы не уверены в синтаксисе драйвера. Чтобы включить ведение журнала для всех запросов, вам нужно запустить в вашей базе данных следующую инструкцию:
db.setProfilingLevel(2)
Затем, чтобы проверить последний запрос, выполненный в базе данных, вам нужно выполнить:
db.system.profile.find().limit(1).sort( { ts : -1 } ).pretty()
Итак, за первый фрагмент кода вы получите:
"pipeline" : [ { "$sort" : { "t" : 1 } },
{ "$limit" : 1 }
]
"pipeline" : [ { "$sort" : { "t" : -1 } },
{ "$limit" : 1 }
]
Для второй пары он печатает
"pipeline" : [ { "$sort" : { "t" : 1 } },
{ "$limit" : 1 }
]
и выбрасывает NotSupportedException для LastOrDefault
на моем компьютере, если он работает на версии драйвера MongoDB, вы можете проверить сгенерированный оператор MongoDB с помощью профилировщика
Для последнего, когда вы наведите курсор мыши на c
в вашей Visual Studio, он печатает
{aggregate([{ "$sort" : { "t" : 1 } }])}
, но поскольку он относится к типу IOrderedQueryable<T>
, это не материализованный запрос, поэтому он будет выполняться в базе данных при запуске FirstOrDefault
, генерирующем то же тело агрегации, что и предыдущие операторы. Я получаю NotSupportedException и здесь. Здесь вы можете найти список поддерживаемых операторов LINQ, и оба Last
и LastOrDefault
не реализованы, поэтому вам нужно отсортировать по убыванию.