2012-01-17 69 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