2012-01-17 3 views
2

以下のコードは機能しますが、最後の2行は "ハッキー"です。これは私がこれまでに動作するように得ている唯一のものです:MongoDb CSharpのFindAndModifyのModifiedDocumentをキャストしない

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。」

デバッグ時に、正しい値でKeyValueDocumentの3つのプロパティがすべて存在することがわかります。そして、私は "Elements"コレクションを見ることができます。最後には増分されたプロパティがあります。 ToStringの "RawValue"プロパティに落ち、Intに解析されます。すごい!

しかし、もっと良い方法があるはずです。私はC#と公式の10genドライバを使用しています。

ありがとうございました。 トラヴィス

答えて

2

私はあなたがこのようにそれを書くことができ、あなたのKeyValueDocumentクラスがどのように見えるかわからないんだけど、それはキー名とです。KeyValue特性を有していると仮定すると:

// 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

感謝を!その方法を完全に逃した。 –

関連する問題