我从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。
此查询适用于除上述情况之外的其他数据类型。
答案 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)