c# - 当 LINQ 应该影响链中的先前调用时,它是如何工作的?(例如 mongo/Linq2Sql)
问题描述
当我使用 MongoDB 时,LINQ 让我感到困惑......
(事实上,它也发生在 Linq2Sql 中)
myCollection.Find(obj=>true)
将运行查询以返回 myCollection 的所有文档。myCollection.Find(obj=>true, new FindOptions(){Limit=1})
显然会运行查询以仅从 myCollection 返回一个文档。myCollection.Find(obj=>true).First()
还将运行查询以仅从 myCollection 返回一个文档。
我关于 #3 的问题:对服务器进行了哪些查询?
A. .First()
导致该.Find()
方法对服务器执行隐式Limit=1
查询,
只返回一个文档?(如果是这样,它是如何实现的?)
B. .Find()
查询所有文件,.First()
只取第一个,然后扔掉其余的?显得很浪费。
谢谢
解决方案
First
MongoDB 驱动程序提供了一个快捷方式.Limit(1)
,从服务器读取数据作为对象:
collection.Find(o => true).First();
// is equivalent to
collection.Find(o => true).Limit(1);
发送到服务器的查询应该是:
db.collection.find().limit(1)
如果它没有发送那个或类似的查询,那将是 MongoDB 驱动程序中的一个错误,您可以联系他们并提交一个错误。
推荐阅读
- c - 上传数据到 MAX 7219
- java - Override annotation required and not - Kotlin
- mysql - MySQL ASCII 码 0-255
- php - $(document).ready 不加载外部 php 文件到 div
- laravel - 在路由上调用正确的控制器
- google-cloud-platform - 将 Caffe 添加到 Datalab 实例
- java - Android Java - 广播接收器 - 应用通知
- javascript - Images load into one
- java - 客户端如何知道服务器何时等待 Java 中的数据?
- html - 如何让引导程序将这个渲染的 django 模板居中?