我的文档中包含大量字段(每个字段7500个) 但是字段值是简单数据(仅数字),当我尝试查询Collection时,它的效果很好(我看着mongo profiler并正确使用了索引) 但是迭代游标(接收数据)花费的时间太长 生成的文档数约为450,但大约需要2分钟才能收到所有文档 我已经将mongoDB版本更新到最后一个,也更新了MongoDB驱动程序(用于.NET),重新创建了索引,但是没有帮助
P.S连接不慢(BD服务器在我的本地网络中-100Base-T /快速以太网) 查询代码示例如下
var builder = Builders<BsonDocument>.Filter;
var filter = builder.Eq("OrgID", orgID);
filter = filter & builder.Eq("DateDeleted", (DateTime?)null);
var collection = GetCollection("NameOfCollection");
var result = collection.Find(filter);
using (var cursor = result.ToCursor())
{
while (cursor.MoveNext())
{
var batch = cursor.Current;
foreach (var document in batch)
{
yield return document;
}
}
}
并且我分别为该字段创建了索引,并且在两个索引中都有一个复合索引
,它适用于文档多但字段少(每个文档约20个字段)的集合
答案 0 :(得分:0)
为什么要使用光标?我的理解是分别获取每个记录。我敢打赌,如果您遍历ToList()会获得更好的性能,因为它可以在一次调用中获取所有数据。
Foreach(var batch in collection.Find(filter).ToList()){
// your other code here
}
您也将获得结果,这意味着该结果嵌套在IEnumerable中,并且在这些检索调用之间进行的操作可能会减慢该过程的速度,但是您忽略了该代码,因此很难说。