2011-05-09 55 views
1

我想了解一個文檔是否存在於使用下面代碼的集合中。每當查詢沒有找到任何文檔時,我會得到一個StackOverflowException。我在做什麼錯?C#Mongodb獲取遊標數

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

+0

你有沒有堆棧跟蹤? – 2011-05-09 19:35:14

+0

Twisternhra:這不是堆棧跟蹤,這是錯誤消息。如果你在Visual Studio中執行此操作(並以調試模式運行),則應該得到一個異常處理程序,其中包含「將異常詳細信息複製到剪貼板」。粘貼您在那裏複製的文本。 – 2011-05-09 20:43:09

+0

那就是我所做的。 Visual Studio沒有給我任何關於發生什麼的信息。其實我找出了問題所在。我不小心調用了錯誤的Save方法,這讓我無限循環。由於某種原因,當我在某個地點設置斷點時,它只能通過循環。 – MattAitchison 2011-05-09 20:56:22

回答

0

你的其他條件似乎不涉及任何與mongo相關的代碼。 doc.Save()調用DocumentData.Save傳遞這個(Document)作爲參數。我只能猜測在那個調用鏈中的某個地方,它最終會再次調用Document.Save。