【问题标题】:C# Mongodb get cursor countC# Mongodb 获取游标计数
【发布时间】:2014-05-08 11:18:58
【问题描述】:

我正在尝试使用下面的代码找出集合中是否存在文档。每当查询未找到任何文档时,我都会收到 StackOverflowException。我做错了什么?

MongoServer server = MongoServer.Create(connectionString);
MongoDatabase db = server.GetDatabase(database);
MongoCollection<Document> documents = db.GetCollection<Document>("Documents");
var query = Query.EQ("DocID", doc.DocID);
var result = documents.FindOneAs<Document>(query);

if (result != null)
{
    doc.Id = result.Id;
    doc.DocCreated = result.DocCreated;
    doc.DocCreatedBy = result.DocCreatedBy;
    doc.MergeFiles(result);
    documents.Save(doc);
}
else
{
    doc.Save();
}

我也在使用官方的 mongodb c# 驱动程序。

编辑: 这是堆栈跟踪。真的没啥好说的。

System.dll 中出现“System.StackOverflowException”类型的未处理异常 无法计算表达式,因为当前线程处于堆栈溢出状态。

编辑 2: 这是我的文档类的链接。 https://gist.github.com/68d38bec41ebc46f30eb

【问题讨论】:

  • Twisternhra:这不是堆栈跟踪,这是错误消息。如果您在 Visual Studio 中执行此操作(并在调试模式下运行),您应该获得一个带有“将异常详细信息复制到剪贴板”的异常处理程序。将复制的文本粘贴到那里。
  • 我就是这么做的。 Visual Studio 没有给我任何关于发生了什么的信息。其实我知道问题出在哪里了。我不小心调用了错误的 Save 方法,这让我陷入了无限循环。出于某种原因,当我在某个位置设置断点时,它只通过循环。
  • doc.Save() 是做什么的?显示该代码。还要设置一些断点,看看这段代码是否被一遍又一遍地调用(无限循环),因为这是最可能的原因。
  • 你能显示 DocumentData 类的代码吗?

标签: c# mongodb mongodb-.net-driver


【解决方案1】:

您的 else 条件似乎不涉及任何与 mongo 相关的代码。 doc.Save() 调用 DocumentData.Save 传递这个 (Document) 作为参数。我只能猜测在该调用链中的某个地方它最终会再次回调 do Document.Save。

【讨论】:

    猜你喜欢
    • 2019-05-28
    • 2016-08-12
    • 1970-01-01
    • 2020-05-17
    • 2014-10-23
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多