【问题标题】:MongoDb c# driver LINQ vs Native queryMongoDb c# driver LINQ vs Native 查询
【发布时间】:2012-10-26 07:21:01
【问题描述】:

这些查询中哪一个使用 linq 性能更好,另一个使用原生查询机制

LINQ

var query =
collection.AsQueryable<Employee>()
.Where(e => e.FirstName == "John")
.Select(e => e); 


NATIVE

var query= Query<Employee>.EQ(e => e.FirstName, "John");
var emp = collection.FindOne(query);

我假设 mongoDb 中的本机查询机制会更好,因为据我了解,它会过滤掉数据库中的结果,因为 linq 首先获取集合中的所有项目,然后过滤结果。我什么时候应该考虑使用 LINQ 而不是本机查询机制?

【问题讨论】:

  • 另一个变体是var query = Query&lt;Employee&gt;.Where(e =&gt; e.FirstName == "John")。然后用query.ToJson()就可以很方便的得到对应的json查询了

标签: linq c#-4.0 mongodb


【解决方案1】:

因为据我了解,它会过滤掉 作为 linq 首先获取集合中的所有项目的数据库和 然后过滤结果

不,不,不。它在数据库级别过滤所有内容。

第二种方式不是构建 mongodb 查询的原生方式。它仍然是相同的包装器,只是构建真正的 native mongod 查询(例如 {"a": 1, "b": 2 })。

第一个查询使用表达式树来构建 mongo 查询。第二个使用反射来构建相同的查询。据我所知,表达式树应该更快(here is 我发现的第一篇文章)。无论如何,我认为性能差异并不重要。因此,只需使用您更喜欢的东西。

就我而言,我对大多数查询使用 linq,一些开发人员甚至可能对 mongo 不太了解,但这里的黑边是您实际上可能没有意识到它可以为您构建什么查询。 (例如与 linq to sql 的情况相同)。但是您仍然可以记录所有本机查询,查看它们并找到优化和更改的地方。对于复杂的查询,我通常使用第二种方法。

【讨论】:

    猜你喜欢
    • 2020-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多