2013-12-09 42 views
0

我正在使用C#驅動程序更新Mongodb中的文檔。我已驗證該更新已成功完成,但如果在更新後立即選擇包含更新文檔的集合,則不會立即看到新值。如果我在更新之後但在選擇之前在代碼中放置斷點,我將在Select中看到結果中的新值。如果我讓代碼直通,我會在我的名字集合中獲得舊值。我試圖改變寫作關注點,但我不認爲就是這樣。有沒有辦法將這兩個操作鏈接在一起,以便在更新完成之前不會發生選擇?Mongodb C#驅動程序 - 更新文檔,然後選擇與更新文檔的集合

var qry = Query.EQ("_id", new ObjectId(id)); 
var upd = Update.Set("age", BsonValue.Create(newAge)); 

db.GetCollection<MongoTest>("mongotest").Update(qry,upd); 

... would like to pause here until update is complete ...  

var names = db.GetCollection<MongoTest>("mongotest") 
    .FindAll().SetSortOrder(SortBy.Ascending("name")) 
    .ToList<MongoTest>(); 

if (names.Count() > 0) 
{ 
    return View(names); 
} 
+1

這很奇怪,因爲.Net的MongoDb驅動程序是同步的,並且默認爲寫入關注的'1'。這只是MongoDb的一個實例嗎? – WiredPrairie

+0

我會認爲它是共享的,但所討論的數據庫是我使用MongoLab託管版本託管的3個數據庫之一。雖然沒有積極的生產,所以我是唯一一個打他們。 –

+0

哎呀...確認.NET驅動程序是同步的,它指導我的調試順着另一條路徑,並且發現我的代碼吞嚥了一個錯誤。謝謝您的幫助! –

回答

0

一個說明。當您開始使用MongoClient時,官方的MongoDB .Net驅動默認爲確認寫入(寫入關注1)。如果從使用MongoServer.Create(現在已過時)的舊樣式開始,則缺省值爲Unacknowledged。 此外,請確保您沒有使用可將您的讀取路由到輔助節點的讀取首選項。

+0

在隱藏錯誤之上,我使用舊的語法來實例化我的客戶端。雙重打擊。謝謝Sridhar! –

相關問題