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

本文关键字:数组元素 更新 驱动程序 Mongodb | 更新日期: 2023-09-27 18:18:29

我似乎弄不清楚更新数组的整个元素所需的确切语句集。这是我目前的文件:

//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#中工作。谢谢你的帮助。

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

您使用的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;

的地方完成