MongoDb c#driver LINQ vs Native查询

时间:2012-10-26 07:21:01

标签: linq c#-4.0 mongodb

使用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而不是本机查询机制?

1 个答案:

答案 0 :(得分:19)

  

因为,据我所知,它过滤掉了结果   数据库,其中linq首先获取集合中的所有项目   然后筛选结果

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

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

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

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