【问题标题】:Is "Fields.Include" required when defining custom fields in a select?在选择中定义自定义字段时是否需要“Fields.Include”?
【发布时间】:2012-03-28 01:56:34
【问题描述】:

我正在使用官方的 MongoDB C# 驱动程序

所以我有这个代码

MongoCollection<MyClass> collection = ...;
var cursor = collection.FindAll();
cursor.Fields = Fields.Include("LastModified", "Name");
foreach (var result in cursor.Select(y => new
    {
        y.Name,
        y.LastModified,
    }))

如果这些字段作为选择的一部分被拒绝,我想知道是否需要cursor.Fields = Fields.Include("LastModified", "Name");。即 mongodb 的 linq 提供程序是否足够智能以优化查询?

【问题讨论】:

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


    【解决方案1】:

    答案分为两部分:

    首先,C# 驱动程序 1.4 版本中的 LINQ 实现不会尝试限制从服务器返回的字段。始终返回整个文档,即使稍后的投影仅使用它的一部分。我们计划在未来的版本中对此进行优化,但这并不像听起来那么容易。

    其次,您实际上并没有使用 LINQ 查询,至少不是 LINQ to MongoDB 查询。在编写代码时,您将整个集合获取到客户端(这就是 FindAll 所做的),然后在本地对检索到的值使用 Select。一个针对 MongoDB 的类似 LINQ 查询可以这样写:

    var query = from y in collection.AsQueryable<MyClass>()
                select new { y.Name, y.LastModified };
    foreach (var result in query)
    {
        // process result
    }
    

    【讨论】:

    • MongoCollection 上没有 AsQueryable
    • 它在 3 月 28 日刚刚发布的新 1.4 版本中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-27
    • 2020-08-14
    • 1970-01-01
    • 2013-03-04
    • 2023-03-13
    • 2019-12-01
    • 1970-01-01
    相关资源
    最近更新 更多