如何从2.5 .NET Core驱动程序中的IMongoQueryable中检索MongoDB查询?

时间:2018-02-27 23:13:44

标签: c# mongodb

我正在尝试使用.NET Core 2.0中最新的C#Driver 2.5从 IMongoQueryable 表达式获取MongoDB查询。

旧版本的大多数示例都说我应该这样做:

((MongoQueryable<TModel>)_collection.AsQueryable()).GetMongoQuery();

(2012年来自Profiling the MongoDB database to see the executed queries

所以在我的代码中,我尝试像这样获取MongoDB查询:

// Create the filter query.
IQueryable<TModel> modelQuery = _collection.AsQueryable()
    .Where(t => t.TeamId == teamId && t.CompanyId == companyId);

// Get the query as it will be executed in MongoDB.
var mquery = (MongoQueryable<TModel>)modelQuery; // This line shows the error below.
var query = mquery.GetMongoQuery().ToJson();

// Get the results.
var models = modelQuery.ToList();

然而,我收到错误:

  

非泛型类型'MongoQueryable'不能与类型一起使用   参数

我的代码中引用的 MongoQueryable 是一个静态扩展方法类。其他示例引用的 MongoQueryable 似乎位于 MongoDB.Driver.Legacy.dll 中,所以我假设它没有移植到.NET Core?我也在.NET Core的NuGet包中找不到这个 .dll

还有其他方法可以从 IMongoQueryable 表达式中获取实际的MongoDB查询吗?

感谢。

1 个答案:

答案 0 :(得分:0)

感谢@jpgrassi,我使用以下代码进行了管理:

// Create the filter query.
IQueryable<TModel> modelQuery = _collection.AsQueryable()
    .Where(t => t.TeamId == teamId && t.CompanyId == companyId);

// Get the query as it will be executed in MongoDB.
var mquery = (MongoQueryable<TModel>)modelQuery; // This line shows the error below.
var query = mquery.GetMongoQuery().ToJson();

// Get the results.
var models = modelQuery.ToList();

// Get the executed query string.
var executionModel = ((IMongoQueryable<TModel>)modelQuery).GetExecutionModel();
var queryString = executionModel.ToString();

就我而言,这会输出如下聚合查询:

aggregate([{ "$match" : { "TeamId" : ...

此查询我现在可以轻松粘贴到我的查询编辑器中并使用它。真棒!