5

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

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);

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

4

1 回答 1

9

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

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

总之,是的, aSelect生成一个$project操作。

关于您的其他问题,您的查询不会被执行,直到您调用诸如ToList(将查询结果提取到内存中)之类的方法或当您迭代结果时。

于 2016-02-05T22:04:47.987 回答