c# - Mongo查询限制未在操作中显示
问题描述
我正在使用 MongoDB.Driver for .NET 来查询 Mongo(版本 3.0.11)。这是我查询字段并将查询限制为 200 个文档的代码。
BsonDocument bson = new BsonDocument();
bson.Add("Field", "Value");
BsonDocumentFilterDefinition<ResultClass> filter = new BsonDocumentFilterDefinition<ResultClass>(bson);
FindOptions queryOptions = new FindOptions() { BatchSize = 200 };
List<ResultClass> result = new List<ResultClass>();
result.AddRange(myCollection.Find<ResultClass>(filter, queryOptions).Limit(200).ToList());
我的问题是,当我检查数据库的当前操作时,操作查询字段仅显示:
{字段:“值”}
这与下面使用“AsQueryable”的查询不同:
List<ResultClass> result = myCollection.AsQueryable<ResultClass>().Where(t => t.Field == "Value").Take(200)
使用“AsQueryable”进行查询操作
{聚合:“CollectionName”,管道:[ { $match:{字段:“Value”}},{ $limit:200 }],光标:{}}
为什么我在使用 Find 的查询中看不到限制?限制是在客户端而不是服务器处理的吗?我需要在服务器端对此进行限制,但我不能使用第二个查询,因为搜索的字段需要是无法使用 AsQueryable 完成的字符串。
解决方案
在第一段代码中使用 limit 会对游标对象执行限制,在您通过调用 ToList() 实际请求文档之前,该对象仍然是服务器端的。此时只有 200 个文档会通过网络传输到您的应用程序。
看起来 AsQueryable 正在执行一个聚合管道,该管道将显示在 currentOp 中,但两者本质上是相同的。
我不确定是否对任何一个都有性能影响
推荐阅读
- ios - WKAudioFileAsset 是音频文件吗,可以发送到服务器吗?
- python - 如何在 z3py 中将 IntVector 转换为 Int
- lua - 为什么核心聊天脚本会停止我的整个游戏?
- java - 如何使用HashMap比较和匹配颜色
- javascript - 在重定向期间将令牌从 API 传递到前端
- r - 如何从下拉列表中过滤数据?
- flutter - 如何在颤动的下拉列表中显示 Json 数据
- c# - 如何修复“Zlib 异常:错误状态(不正确的数据检查)”
- schema.org - 如何使用 JSON-LD 将自定义属性添加到“产品”类型?
- android - 为什么物理模拟器不显示?