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

Projection with AsQueryable in MongoDB C# driver 2.2

我正在尝试 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 运算符,它是否与投影具有相同的效果?或者仍然会从数据库服务器获取所有元素,然后 select 应用服务器中的指定元素?

是的,这是可能的。如果您将 Select (Select(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();

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

关于你的其他问题,你的查询不会被执行,直到你调用像 ToList 这样的方法(它将查询的结果提取到内存中)或者当你迭代结果时.