2011-12-14 20 views
5

MongoDBからデータを取得し、WPFデータグリッドにバインドしています。ObjectIdに文字列を変換する方法

私のコードは、複数の行を選択してIDを取得し、選択したレコードを更新します。

var server = MongoServer.Create(this.connectionString); 
var db = server.GetDatabase(DATABASE); 
var viewTrue = db.GetCollection(RISKALERT_TBL); 
var count = viewTrue.Count(); 
foreach (RiskSettings row in grdRiskAlerts.SelectedItems) 
{ 
    viewTrue.Update(Query.EQ("ID",row.ID), Update.Set("View", "False")); 
    LoadandBindData(); 
} 

しかし、それはレコードを更新しません。

私はおそらくrow.idが文字列を返すとIDのデータ型がobjectIdだと思った。

このクエリは、上記以外の他のデータ型でも機能します。

答えて

7

文字列をObjectIdに変換するには、ObjectId.Parse(string)メソッドを使用します。

"ID"ではなく"_id"でも試合してみてください。

だから、のようなもの:ObjectIDのためのパブリックプロパティを設定するとき、私は同じ問題に出くわした

viewTrue.Update(Query.EQ("_id", ObjectId.Parse(row.ID)), Update.Set("View", "False")); 
+1

これは、文字列がすでにObjectIdである場合にのみ有効です。任意の文字列では機能しないようです。 –

+1

@AsadSaeeduddinはい、それは 'int.Parse'のようです。文字列を 'ObjectId'に変換できない場合は、もちろんそれが動作するとは期待できません。 –

2

私のプロパティはObjectIDを文字列に変換し、次のコードスニペットを使用してObjectIDに戻ります。

私は完全な名前空間を使用していたので、オブジェクトIDが.Parse()

MongoDB.Bson.ObjectId.Parseこのような
public string Id 
    { 
     get { return Convert.ToString(_id); } 
     set { _id = MongoDB.Bson.ObjectId.Parse(value); } 
    } 

にアクセスするには、オプションとして来ていませんでしたが、この情報がお役に立てば幸い!

0

あなたのmongoからObjectId関数を要求するだけです。

ObjectId = require('mongodb').ObjectID; 

次に、あなたがそのようにそれを使用することができます:私が使用することがわかった

viewTrue.Update(Query.EQ("ID",ObjectId(row.ID)), Update.Set("View", "False")); 
1

最も簡単な方法:new ObjectId(yourString)

ObjectId(row.ID) 

は、だから、に、コードのあなたの行を変更することができます。これは文字列からMongoDB ObjectIdを与え、あなたのクエリのどれかで動作するはずです。

関連する問題