在MongoDB C#驱动程序2.2中使用AsQueryable进行投影

Ame*_*mey 5 c# asqueryable mongodb mongodb-.net-driver

我正在尝试使用MongoDB C#驱动程序2.2版.我正在尝试使用投影,因为我不想检索文档中的所有元素.我发现一种方法是使用项目运算符和find运算符,如下所示:

collection.Find(key => key.Index == 1).Project<MyClass>(Builders<MyClass>.Projection.Include(key => key.Name).Include(key => key.Index)). ToEnumerable ();
Run Code Online (Sandbox Code Playgroud)

但是,我有兴趣使用AsQueryable API以及where运算符,如下所示:

collection.AsQueryable().Where(key => key.Index == 1);
Run Code Online (Sandbox Code Playgroud)

在上述情况下是否可以使用投影?如果我使用选择运算符,它会与投影具有相同的效果吗?或者仍然会从数据库服务器获取所有元素,然后在应用程序服务器中选择指定的元素?

oct*_*ccl 7

对的,这是可能的.如果在查询中添加一个Select(Select(i => new { i.Name, i.Index}))并ToString在最后调用方法,您将看到Linq提供程序生成一个包含两个操作(a $match和a $project)的聚合管道:

var query=collection.AsQueryable().Where(key => key.Index == 1).Select(k=>new {k.Name,k.Index});
var aggregate= query.ToString();
Run Code Online (Sandbox Code Playgroud)

在sumary中,是的,a Select生成一个$project操作.

关于您的其他问题,在您调用类似的方法ToList(即将查询的结果提取到内存中)或迭代结果之前,您的查询将不会被执行.