Mongodb C#驱动程序更新数组元素

时间:2014-08-18 23:51:39

标签: c# mongodb

我似乎无法弄清楚更新数组的整个元素所需的确切语句集。这就是我目前所拥有的:

//id, gameId, updatedGame passed in
var client = mongoContext.Clients.FindOne( Query<Client>.EQ(x => x.Id, id));
var index = client.Games.FindIndex(x => x.Id == gamedId);
var update = Update<Client>.Set(x => x.Games[index], updatedGame);
var query = Query<Client>.EQ(x => x.Id, client.Id);
mongoContext.Clients.Update(query, update);
mongoContext.Clients.Save(client);

我可以在javascript中执行此操作,但不幸的是我现在正在使用C#。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

您使用的Update()语句更适合批量更新。在这种情况下,您只需要更新一条记录,这样您只需要Save()功能。此外,如果不知道mongoContext背后的代码,我们只能提供一些帮助。您的对象看起来像EF Code First和mongo语法之间的混合使用。无论如何,这就是我如何完成非常类似的事情:

MongoCollection<Reported> collection = GetCollection();
Reported report = collection.FindOneById(Id);
report.IsReviewed = true;
collection.Save(report);

使用FindOneById()函数mongo返回对象的副本ObjectId。这意味着当您将其传递回Save()函数时,将更新对该对象的所有后续更改。在您的情况下,更改数组值将在我设置report.IsReviewed = true;

的位置完成