如何将字符串转换为ObjectId

时间:2011-12-14 11:23:21

标签: mongodb mongodb-.net-driver

我从MongoDB获取数据并绑定到WPF数据网格。

我的代码选择多行,检索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 个答案:

答案 0 :(得分:13)

要将字符串转换为ObjectId,请使用ObjectId.Parse(string)方法。

还尝试匹配"_id"而不是"ID"

类似于:

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

答案 1 :(得分:3)

我在为ObjectID设置公共属性时遇到了同样的问题。

我的属性将ObjectID转换为字符串,并使用以下代码片段将其转换为ObjectID。

ObjectID没有作为一个选项出现,所以我不得不使用完整的命名空间来访问.Parse()这样的MongoDB.Bson.ObjectId.Parse

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

希望这有帮助!

答案 2 :(得分:2)

我找到的最简单的方法是使用:new ObjectId(yourString) ...这将从字符串中为您提供MongoDB ObjectId,并且可以处理您的任何查询。

答案 3 :(得分:0)

您只需要从您的mongo中获取ObjectId函数。

ObjectId = require('mongodb').ObjectID;

然后你可以这样使用它:

ObjectId(row.ID)

因此,您可以将代码行更改为:

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

答案 4 :(得分:0)

另一种方法是:

myString := "5f4f321d7125461260ad9d74"

objectId, err := primitive.ObjectIDFromHex(myString)

if err != nil {
    panic("Invalid id")
}

答案 5 :(得分:0)

如果你用mgo,你可以试试这个

id := "603f4d6415177136d0583d4d"
_id := bson.ObjectIdHex(id)

答案 6 :(得分:-1)

我在代码中遇到了类似的问题,并且进行了一些小调整就为我解决了这个问题。

因此EQ()->需要一个对象和一个字符串。 因为您正在使用
Query.EQ(“ ID”,row.ID) 我建议使用这样的东西

id应为ObjectId类型 var res = Query.EQ(p => p.Id,id);

以res参数为单位,并使用所需的查询。 阿索尔我用过的。

我希望它会有所帮助。

enter image description here