我正在尝试使用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);
在上述情况下是否可以使用投影?如果我使用选择运算符,它会与投影具有相同的效果吗?或者仍将从数据库服务器获取所有元素,然后在应用程序服务器中选择指定的元素?
答案 0 :(得分:7)
是的,有可能。如果您在查询中添加Select
(Select(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>