【问题标题】:Projection with AsQueryable in MongoDB C# driver 2.2在 MongoDB C# 驱动程序 2.2 中使用 AsQueryable 进行投影
【发布时间】:2016-05-15 17:42:44
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    是的,这是可能的。如果您在查询中添加Select (Select(i =&gt; 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 这样的方法(将查询结果提取到内存中)或当您对结果进行迭代时。

    【讨论】:

    • 可以使用Excluded syntax吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多