2011-12-14 75 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,并且可以处理你的任何查询。