2011-12-14 99 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"

因此,像:

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

這似乎只有在字符串已經是ObjectId時才起作用。它似乎不適用於任意字符串。 – 2015-08-12 14:45:56

2

我遇到同樣的問題,建立了對象ID的公共屬性時就來了。

我的屬性將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; 

然後你可以使用它像:

ObjectId(row.ID) 

所以,你可以在你的代碼行更改爲:

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

我發現了用最簡單的方法:new ObjectId(yourString)。 ..這會給你一個來自字符串的MongoDB ObjectId,並且可以處理你的任何查詢。