我似乎无法弄清楚更新数组的整个元素所需的确切语句集。这就是我目前所拥有的:
//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#。 谢谢你的帮助。
答案 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;