16

这些查询中哪一个在性能方面更好,一个使用 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?

4

1 回答 1

21

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

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

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

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

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

于 2012-10-26T07:45:11.527 回答