2012-01-17 33 views
2

下面的代碼有效,但顯然最後兩行是「hacky」。這是我已經得到了工作至今的唯一的事情:「KeyValueDocument」不能轉換MongoDb中FindAndModify的ModifiedDocument CSharp

var collection = _database.GetCollection<KeyValueDocument>(KeyValueDocumentCollectionName); 

var query = Query.And(Query.EQ("KeyName", keyName)); 
var sortBy = SortBy.Ascending("KeyName"); 
var update = Update.Inc("KeyValue", adjustmentAmount); 
var result = collection.FindAndModify(query, sortBy, update, true); 

var newValue = result.ModifiedDocument.Elements.Last().Value; 
return Int32.Parse(newValue.RawValue.ToString());       

的問題是,我無法投result.ModifiedDocument正確回

調試時,我可以清楚地看到,KeyValueDocument的所有三個屬性都是存在的,用正確的值。我可以看到「元素」集合,其中最後一個集合的屬性增加了。墜落到了「RawValue」屬性的ToString,解析成一個int。呼!

但是...有一定有一個更好的辦法!我使用C#和官方10gen驅動程序。

如果可以,請幫助,謝謝! 特拉維斯

回答

2

我不知道你的KeyValueDocument類是什麼樣子,但假定它有鍵名和鍵值的屬性,你可以寫這樣的:

// initialize query, sortBy and update as you proposed 
var result = collection.FindAndModify(query, sortBy, update, true); 
var modifiedDocument = result.GetModifiedDocumentAs<KeyValueDocument>(); 
return modifiedDocument.KeyValue; // I'm assuming KeyValue is of type int 
+0

的感謝!完全錯過了這個方法。 – 2012-01-17 12:53:25