这些查询中哪一个性能更好?一个使用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中的本机查询机制会更好,因为据我所知,它会过滤掉数据库中的结果,其中as linq首先获取集合中的所有项,然后过滤结果.我应该考虑在本地查询机制上使用LINQ吗?

推荐答案

因为,据我所知,它会过滤掉

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

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

第一个查询使用表达式树来构建mongo查询.第二种方法是使用反射来构建相同的查询.正如我所知,表达式树应该更快(我发现的第一篇文章是here is).无论如何,我不认为性能差异是必要的.所以,多用你喜欢的.

至于我,我使用linq进行大多数查询,一些开发人员甚至可能对mongo知之甚少,但这里的黑面是,您实际上可能没有意识到它可以为您构建什么样的查询.(例如linq到sql的情况也是如此).但您仍然能够记录所有本机查询,查看它们,并找到进行优化、更改的地方.对于复杂的查询,我通常使用第二种方法.

Mongodb相关问答推荐

为什么这个查询可以在MongoDB中使用?

MongoDb聚合查询问题

MongoDB:从开始日期和结束日期数组中匹配特定日期的聚合查询

对 MongoDB 集合中的对象数组进行排序

嵌套数组 $unwind 和 $group 在 mongoDB 中重新组合在一起

没有mongoose 的 Express 和 MongoDB

mongodb中集合的最大大小是多少

看起来当我执行 fs.writeFile() 时,更改的文件会重新启动 nodemon.怎么让它不重启?

子文档上的mongoose唯一索引

在mongo聚合中将ObjectID转换为字符串

Node.js 数据库的抽象层

使用管道聚合的 Spring Data MongoDB 查找

MongoDB:在集合上设置 TTL 索引时出错: sessions

如何在 mongoDB 中聚合巨大的数组?

将 MongoCursor from ->find() 转换为数组

MongoDB 范围查询中 $lt 和 $gt 的顺序

C# MongoDB 驱动程序 - 如何使用 UpdateDefinitionBuilder?

如何匹配 MongoDB 聚合框架中的 undefined值?

Mongodb同时在多个字段上聚合(计数)

PyMongo 创建具有 2 个或更多字段的唯一索引