【问题标题】:MongoDB C# Driver 'Cursor not found'MongoDB C# 驱动程序'找不到光标'
【发布时间】:2023-03-20 11:31:01
【问题描述】:

我有一个相当密集的操作,让MongoCursor 在循环中运行了几个小时(在通过 c# 驱动程序运行的 vb.net 应用程序上。我不太确定是什么原因导致它,但我遇到了一段时间后异常

Cursor not found

这可能是因为光标超时,也许?有没有办法阻止它发生?如果是超时问题,我该如何设置更长的超时时间?

【问题讨论】:

    标签: mongodb mongodb-.net-driver


    【解决方案1】:

    您可以通过调用在 C# 驱动程序中禁用光标超时:

    cursor.SetFlags(QueryFlags.NoCursorTimeout);
    

    否则会在 10 分钟不活动后关闭。

    Reference

    【讨论】:

    • 如果没有将光标耗尽到最后一个元素,这会导致mongo内存泄漏。
    • 您还可以更改批量大小(根据stackoverflow.com/a/24200795/420867 - 这是一个 python 问题,但 C# mongo 驱动程序应该也可以)
    【解决方案2】:

    进一步澄清 JohnnyHK 的答案,这是语法:

    MongoCursor<BsonDocument> cursor = myCollection
                                       .Find(query)
                                       .SetSortOrder(SortBy.Ascending("TrackingNumber"))
                                       .SetFlags(QueryFlags.NoCursorTimeout);
    

    【讨论】:

      【解决方案3】:

      我正在使用 MongoDB.Driver 版本 2.4.4 并且 IFindFluent 不包含 SetFlags 方法。改用这个:

      cursor.Options.NoCursorTimeout = true;
      

      【讨论】:

      • 如果 NoCursorTimeout 设置为 true 并且您已经用尽了光标,会发生什么?会不会有内存泄漏或性能问题?
      猜你喜欢
      • 2016-10-18
      • 1970-01-01
      • 1970-01-01
      • 2016-08-03
      • 1970-01-01
      • 2012-10-02
      • 1970-01-01
      • 1970-01-01
      • 2016-03-13
      相关资源
      最近更新 更多