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

时间:2016-02-05 16:48:33

标签: c# mongodb mongodb-.net-driver asqueryable

我正在尝试使用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 ();

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

collection.AsQueryable().Where(key => key.Index == 1);

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

1 个答案:

答案 0 :(得分:7)

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

$project

在sumary中,是的,var query=collection.AsQueryable().Where(key => key.Index == 1).Select(k=>new {k.Name,k.Index}); var aggregate= query.ToString(); 会生成Select操作。

关于您的其他问题,在您调用$project之类的方法(即将查询结果提取到内存中)或迭代结果时,您的查询将不会被执行。< / p>