我正在尝试使用.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查询吗?
感谢。
答案 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" : ...
此查询我现在可以轻松粘贴到我的查询编辑器中并使用它。真棒!