2016-02-05 95 views
4

我正在尝试使用MongoDB C#驱动程序版本2.2。我正在尝试使用投影,因为我不想检索文档中的所有元素。 我发现做到这一点的方法之一是使用find操作,像这样一起使用项目运营商:在MongoDB C#驱动程序中使用AsQueryable进行投影2.2

collection.Find(key => key.Index == 1).Project<MyClass>(Builders<MyClass>.Projection.Include(key => key.Name).Include(key => key.Index)). ToEnumerable(); 

不过我感兴趣的使用AsQueryable已API与地方运营商,像这样一起:

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

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

回答

5

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

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

在sumary ,是的,一个Select生成一个$project操作。

关于您的其他问题,只有调用ToList(即将查询结果存入内存)或迭代结果时,才会执行查询。

+0

是否可以使用Excluded语法? – zicjin